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之后仍可以继续执行其他代码)
/**
// 实例化
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());
/**
app.listen(3000);