中间件
Egg 是基于 Koa 实现的,所以 Egg 的中间件形式和 Koa 的中间件形式是一样的,都是基于洋葱圈模型。每次我们编写一个中间件,就相当于在洋葱外面包了一层。
洋葱圈模型:
以下图为例;
该图的执行顺序为:1、var start = new Data 2、yield next 3、var start = new Data 4、yield next 5、var used =new Date- start; 6、console.log 7、var ms=new Date- start;
由此可见,所有的请求经过一个中间件的时候都会执行两次;
通用配置
- enable:控制中间件是否开启。
- match:设置只有符合某些规则的请求才会经过这个中间件。
- ignore:设置符合某些规则的请求不经过这个中间件。
中间件使用:
1. 在应用中使用中间件:
在应用中,我们可以完全通过配置来加载自定义的中间件,并决定它们的顺序。
“gzip为一个中间件”
2.在框架和插件中使用中间件
应用层定义的中间件(app.config.appMiddleware)和框架默认中间件(app.config.coreMiddleware)都会被加载器加载,并挂载到 app.middleware 上。
3. router 中使用中间件
如果你只想针对单个路由生效,可以直接在 app/router.js 中实例化和挂载,如下: