koa

安装

  •  npm i koa 

基本使用

const Koa = require('koa')
const app = new Koa()

app.use(ctx => {
  ctx.body = 'hello koa'
})

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})
  • 导入koa并实例化,编写中间件,启动服务并监听3000端口

什么是中间件

  • 在请求和响应中间的处理程序称为中间件
  • 中间件是一个函数

洋葱圈模型

const Koa = require('koa')
const app = new Koa()

app.use((ctx, next) => {
  console.log(1);
  next() // 等待下一个中间件执行完毕后再执行 next 函数后面的代码
  console.log(2)
})

app.use((ctx, next) => {
  console.log(3);
  next() // 等待下一个中间件执行完毕后再执行 next 函数后面的代码
  console.log(4);
})
app.use(ctx => {
  console.log(5);
  ctx.body = '处理完成'
})

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})
  • 为什么输出的结果是 1 3 5 4 2
  • 当一个中间件执行  next() 则该中间件会暂停并执行下一个中间件,下一个中间件执行完毕后才会执行该中间件  next 后面的代码

ctx

  • ctx 中包含了基于原生  http 请求和响应的封装

路由

  •  npm i koa-router 
const Koa = require('koa')
const Router = require('koa-router')
const app = new Koa()
const router = new Router() // 实例化路由对象
// 编写路由规则
router.get('/', ctx => {
  ctx.body = '这是主页'
})

router.get('/users', (ctx) => {
  ctx.body = '这是用户页'
})
router.post('/users', (ctx) => {
  ctx.body = '创建用户'
})

// 注册路由中间件
app.use(router.routes())

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})
  • 引入路由文件
  • 实例化路由对象
  • 编写路由规则
  • 注册路由中间件

参数处理

const Router = require('koa-router')
// 创建路由实例并添加路由前缀
const router = new Router({prefix: '/users'})

// GET /users?name=zs&age=66 -- 获取query查询参数
router.get('/', (ctx) => {
  const query = ctx.query
  ctx.body = query
})

// GET /users/:id --- 动态params路由参数获取
router.get('/:id', (ctx) => {
  const params = ctx.params
  ctx.body = params
})

// POST /users -- 处理body参数
router.post('/', (ctx) => {
  const body = ctx.request.body;
  console.log(body);
  ctx.body = '创建用户'
})

module.exports = router
  • 处理body参数需要借助一个中间件  npm install koa-body 
  • 并且在注册中间件时,需要在注册路由中间件之前注册

错误处理

  • 404 当请求的资源找不到或者没有通过  ctx.body  返回时,koa会自动返回404
  • 手动抛出 通过 ctx.throw 抛出的
  • 500 运行时错误

使用中间件来处理错误

  •  npm install --save koa-json-error 
const Koa = require('koa')
const Router = require('koa-router')
const koaBody = require('koa-body')
const error = require('koa-json-error')
const app = new Koa()
const router = new Router() // 实例化路由对象

const userRoute = require('./router/users')
router.get('/', ctx => {
  ctx.body = '这是主页'
})
// 注册 处理错误中间件
app.use(error({
  format: (err) => {
    return {code: err.status, message: err.message, result: err.stack}
  },
}))
app.use(koaBody())
app.use(router.routes())
app.use(userRoute.routes())


router.get('/test', (ctx) => {
  ctx.throw(422, '参数格式不正确') // koa-json-error中间件自动处理该错误
})

app.listen(3000, () => {
  console.log('server is running on http://localhost:3000')
})

 

上一篇:八大排序算法


下一篇:排序--选择排序