Koa2篇-简单介绍及使用

一.简介

koa2是基于 Node.js 平台的下一代 web 开发框架, 致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 可以避免异步嵌套. express中间件是异步回调,Koa2原生支持async/await

二.async/await

const { rejects } = require("assert");
const { resolve } = require("path/posix");
// 普通函数
const getData1 = ()=>{
  return { uname: "普通函数"}
}
console.log(getData1());   //   { uname: '普通函数' }
// async + 普通函数
const getData2 = async ()=>{
  return { uname: "async + 普通函数"}
}
console.log(getData2());   //  Promise { { uname: '普通函数' } }
getData2().then(data=>{
  console.log(data);   // { uname: 'async + 普通函数' }
})

const getData3 = (params)=>{
  return new Promise((resolve,reject)=>{    //resolve 成功的结果, reject失败的结果
    if(!params){
      reject({ err:'参数为空!' })
    }else{
      resolve({ message: "成功!" })
    }
  })
}

getData3().then(data=>{
  console.log("1resolve传的数据", data)
}).catch(err=>{
  console.log("1reject传的数据---",err);
})  //reject传的数据--- { err: '参数为空!' }
// 异步函数使用.catch接收错误信息,    同步函数使用try{}catch{}
getData3(222).then(data=>{
  console.log("2resolve传的数据", data)
}).catch(err=>{
  console.log("2reject传的数据---",err);
})  //2resolve传的数据 { message: '成功!' }

三.koa2的基本使用

1.安装及创建

项目初始化  npm init -y
安装   npm i koa -g   
使用脚手架的方式安装    npm install -g koa-generator
创建项目   koa2 koapro[koapro 项目名称]
配置前的项目启动  npm start koapro 或 npm run start

2.路由

(1)app.js

// 引入路由
const books = require('./routes/books')
// 注册路由
app.use(books.routes(), books.allowedMethods())

(2)routes/books.js

get请求, 在获取参数时,可直接使用 ctx.query

const { searchList } = require('../utils/mysqlUtils')
// 引入koa
const router = require('koa-router')()
// 设置路由前缀
router.prefix('/books')
// 设置路由
router.get('/search',async (ctx,next)=>{    //ctx  相当于 req,res
  // 页面显示内容 
  // 方式1: 直接使用ctx.body   
  // ctx.body = 'hahah'
  // 方式2: 使用模板渲染
  /*   await ctx.render('index',{
         title: '哈哈哈哈'
  }) */
  //注意 async/await的使用, 避免无法返回查询结果
  await searchList(ctx, 'books')
})  
// 导出
module.exports = router

(3)routes/users

post 请求, 在获取参数时, 使用 ctx.request.body 接收

const router = require('koa-router')()
const { login } = require('../utils/mysqlUtils')
router.prefix('/users')
router.post('/login', async function (ctx, next) {
  await login(ctx,'users')
})

module.exports = router

(4)连接数据库

const mysql = require('mysql')
// 加密模块中的随机生成数
const sqlconfig = require('../config/sqlconfig')
//    使用连接池 pool.createPool()
let pool = mysql.createPool(sqlconfig)
// 执行数据库
const exec = (sql) => {
  return new Promise((resolve, reject) => {
    pool.getConnection((err, conn) => {
      if (err) {
        //连接错误
        reject(err)
      } else {
        //连接成功
        conn.query(sql, (err, data) => {
          if (err) {
            //操作失败
            reject(err)
          } else {
            resolve({
              code: 0,
              message: '操作成功!',
              data,
            })
                        // resolve(data)
          }
        })
      }
            // 当连接不再使用时,用conn对象的release方法将其归还到连接池中
            conn.release()
    })
  })
}
// 查询   获取get请求参数使用 ctx.query
const searchList = async(ctx, table) => {
        // 根据输入的查询条件查找数据   若无参数则查询所有
      let sql = `select * from  ${table} where 1=1`
    let keys = Object.keys(ctx.query)
    let values = Object.values(ctx.query)
        let keyArr = []
        let valArr = []
        let str = ''
        let i = 0
        keys.forEach((item,index)=>{
            keyArr.push(item.trim())
        valArr.push(`${values[index].trim()}`)
            str += ` and ${keyArr[i]} like '%${valArr[i]}%' `
            i++
        })
        sql += str
    const data = await exec(sql)
    ctx.body = data
}

const login = async (ctx, table)=>{
     // 根据 phone / email 作为账号来登录 输入内容不为空, 判断是Email还是phone   根据对应信息查询数据, 如果能查到则登录成功, 否则登陆失败                                           
     let paramsArr = Object.values(ctx.request.body)
     // 有数据
     let flag = 0
     if(paramsArr && paramsArr.length > 0){
       // 遍历数组,并去空
       paramsArr.forEach(item => {
         if(item.trim().length === 0){
           flag++
         }
       })
       // 账号 密码存在
       if(flag === 0 && ctx.request.body.password.length > 0){
         let username = paramsArr.toString().indexOf('@') > 0 ? 'email' : 'phone'
         let sql = `select * from users where `
         if(username === 'email'){
           const {password , email } = ctx.request.body
           // 邮箱登录
           sql += ` password = '${ password }' and email = '${email}' `
           console.log(sql);
           // 查询数据, 查到则登录成功
           await exec(sql).then(result=>{
             console.log(result.data);
             if(result.data.length > 0){
              ctx.body= {
                 code: 1,
                 message: '登录成功!',
                 result
               }
             }else{
              ctx.body= {
                 code: 0,
                 message: '登录失败!'
               }
             }
           })
         }
         if(username === 'phone'){
           const {password , phone } = ctx.request.body
           // 邮箱登录
           sql += ` password = '${ password }' and phone = '${phone}' `
           console.log(sql);
           // 查询数据, 查到则登录成功
           await  exec(sql).then(result=>{
             // console.log(result);
             if(result.data.length > 0){
              ctx.body= {
                 code: 1,
                 message: '登录成功!',
                 result
               }
             }else{
              ctx.body= {
                 code: 0,
                 message: '登录失败!'
               }
             }
           })
         }
       }else{
         // 账号或密码为空
         ctx.body= {
           code: -1,
           message : "账号或密码不能为空!"
         }
       }
     }else{
        ctx.body= {
         code: -1,
         message : "账号和密码不能为空!"
       }
     }
   
}
module.exports = {
  searchList,
  login
}

源代码放在这里啦~~~

https://download.csdn.net/download/qq_54379580/87443081

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本文档介绍koa-router的使用方法和API,帮助开发者更好地应用koa-router进行路由管理。 koa-router是一个基于koa的路由管理器,它提供了一种简单、灵活的方式来定义和处理路由。它支持常见的RESTful API风格,如GET、POST、PUT和DELETE等,同时还支持中间件和参数传递等特性。 安装koa-router 在使用koa-router之前,我们需要先安装它。可以通过npm进行安装: ``` npm install koa-router ``` 使用koa-router 在使用koa-router之前,我们需要先引入它: ```javascript const Koa = require('koa'); const Router = require('koa-router'); const app = new Koa(); const router = new Router(); ``` 定义路由 在koa-router中,我们可以通过router对象来定义路由。以下是一个简单的例子: ```javascript router.get('/', async (ctx, next) => { ctx.body = 'Hello World!'; }); router.get('/users', async (ctx, next) => { ctx.body = 'User List!'; }); router.get('/users/:id', async (ctx, next) => { const { id } = ctx.params; ctx.body = `User ${id}`; }); ``` 上面的例子中,我们定义了三个路由: - GET /: 返回"Hello World!" - GET /users: 返回"User List!" - GET /users/:id: 返回"User {id}",其中:id表示一个参数 使用路由 在定义完路由后,我们需要将它们应用到Koa应用程序中: ```javascript app.use(router.routes()); app.use(router.allowedMethods()); ``` 其中,`router.routes()`用于将路由应用到应用程序中,`router.allowedMethods()`用于处理不支持的HTTP方法。 中间件 koa-router还支持中间件,可以通过以下方式使用: ```javascript const auth = async (ctx, next) => { if (ctx.isAuthenticated()) { await next(); } else { ctx.status = 401; ctx.body = 'Unauthorized'; } }; router.get('/private', auth, async (ctx, next) => { ctx.body = 'Private Content!'; }); ``` 上面的例子中,我们定义了一个中间件`auth`,它用于验证用户是否已经通过身份验证。在定义路由时,我们将其作为第二个参数传递给`router.get()`方法,表示只有通过身份验证的用户才能访问该路由。 参数传递 koa-router还支持参数传递,可以通过以下方式使用: ```javascript router.get('/users/:id', async (ctx, next) => { const { id } = ctx.params; const user = await getUserById(id); ctx.body = user; }); ``` 上面的例子中,我们使用`:id`作为参数占位符,并通过`ctx.params`获取传递的参数值。 API koa-router的API如下: - router.get(path, middleware): 定义一个GET路由 - router.post(path, middleware): 定义一个POST路由 - router.put(path, middleware): 定义一个PUT路由 - router.delete(path, middleware): 定义一个DELETE路由 - router.patch(path, middleware): 定义一个PATCH路由 - router.head(path, middleware): 定义一个HEAD路由 - router.options(path, middleware): 定义一个OPTIONS路由 - router.all(path, middleware): 定义一个支持所有HTTP方法的路由 - router.use(middleware): 定义一个中间件 - router.routes(): 返回应用程序中定义的路由 - router.allowedMethods(): 处理不支持的HTTP方法 总结 koa-router是一个灵活、易用的路由管理器,它提供了丰富的特性,如RESTful API风格、中间件、参数传递等。通过学习本文档,开发者可以更好地了解koa-router的使用方法和API,从而更好地应用koa-router进行路由管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mteee.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值