一、自定义中间件
1.在app目录下新建 middleware 文件夹,在 middleware文件夹里面新建一个中间件的文件。我这里新建一个printdate.js 文件
/*
options: 中间件的配置项,框架会将 app.config[${middlewareName}] 传递进来。
app: 当前应用 Application 的实例。
配置中间件
*/
module.exports = (options, app)=>{
//返回一个异步的方法
return async (ctx,next)=>{
//打印时间操作
console.log(new Date());
await next();
}
}
2.使用printdate 这个中间件,在 config/config.default.js文件中添加配置
config.middleware = ['printdate'];
printdate 是文件的名称。
配置好之后就中间件就已经写好了。现在每次请求都会打印一下时间!!!
3.传入参数到中间件中,在 config/config.default.js 配置参数
options 的值就是在 config.default.js 文件里面给中间件配置的参数。
中文文档:https://eggjs.org/zh-cn/basics/middleware.html
二、路由中间件
1、新建 middleware/auth.js
module.exports = (options, app)=>{
console.log(options);
//返回一个异步的方法
return async (ctx,next)=>{
//打印时间操作
console.log(new Date());
//这里也可以做权限验证之类的
await next();
}
}
2、router.js 挂载指定的中间件
'use strict';
/**
* @param {Egg.Application} app - egg application
*/
module.exports = app => {
const { router, controller } = app;
const auth = app.middleware.auth({ attr: '参数1' });
router.get('/', controller.home.index);
router.get("/admin/:id",auth,controller.admin.index)
};
当执行http://localhost:7001/admin/1 路由的时候,就会执行auth这个中间件
三、框架默认中间件的配置
在 config.default.js文件里面配置bodyParser中间件的参数
config.bodyParser={ jsonLimit:'10mb' //Defaultis1mb. }
四、Egg.js 中使用 koa 的中间件 (规范的 Koa 的中间件)
以 koa-compress 为例,使用 koa-compress 开启服务器 Gzip 压缩功能;
1.在middleware文件夹下新建compress.js 文件,在文件里面引用koa-compress中间件
module.exports=require('koa-compress');
2.在 config/config.default.js文件中添加配置
config.middleware = ['compress'];
config.compress = {
threshold: 1024 //它支持指定只有当 body 大于配置的 threshold 时才进行 gzip 压缩
};
五、Egg.js 中使用 koa 的中间件 (非规范的 Koa 中间件)
app/middleware/webpack.js
constwebpackMiddleware=require('some-koa-middleware');
module.exports=(options,app)=>{
return webpackMiddleware(options.compiler,options.others);
}
六、Egg.js 中间件的通用配置
enable:控制中间件是否开启。
match:设置只有符合某些规则的请求才会经过这个中间件。
ignore:设置符合某些规则的请求不经过这个中间件。