koa 中间件

https://www.kancloud.cn/aibabel/koafornodejs/1812621
中间件工作原理
初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存储中间件,use调用顺序会决定中间件的执行顺序。
每个中间件都是一个函数(不是函数将报错),接收两个参数,第一个是ctx上下文对象,另一个是next函数(由koa-compose定义)
在建立好http服务器后,会调用koa-compose模块对middleware中间件数组进行处理。具体代码这里就不贴了,原理就是:会从middleware数组中取第一个函数开始执行,中间件函数中调用next方法就会去取下一个中间件函数继续执行。每个中间件函数执行完毕后都会返回一个promise对象。(ps:调用next方法并不是表示当前中间件函数执行完毕了,调用next之后仍可以继续执行其他代码)

/**



  • koa 中间件的执行顺序
    /
    // 引入模块
    const Koa = require(‘koa’);
    const router = require(‘koa-router’)(); /
    引入是实例化路由 推荐*/



// 实例化
let app = new Koa();



// Koa中间件
// 匹配任何路由,如果不写next,这个路由被匹配到了就不会继续向下匹配



// www.域名.com/news
app.use(async (ctx, next) => {
console.log(‘1、这是一个中间件01’);
await next();



console.log(‘5、匹配路由完成以后又会返回来执行中间件’);
})



app.use(async (ctx, next) => {
console.log(‘2、这是一个中间件02’);
await next();



console.log(‘4、匹配路由完成以后又会返回来执行中间件’);
})



router.get(‘/’, async (ctx) => {
ctx.body = ‘首页’;
})



router.get(‘/news’, async (ctx) => {
console.log(‘3、匹配到了news这个路由’);
ctx.body = ‘这是一个新闻页面’;
})



router.get(‘/login’, async (ctx) => {
ctx.body = ‘登录页面’;
})



app.use(router.routes());
app.use(router.allowedMethods());
/**



  • router.allowedMethods() 作用:这是官方文档的推荐用法,我们可以

  • 看到 router.allowedMethods() 用在了路由匹配 router.routes()之后,

  • 所以在当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
    */



app.listen(3000);


Category node