Egg.js约定中间件要写在/app/middleware文件夹下面,如果没有middleware可以自己建立。在文件夹下,新建一个counter.js的文件。简单做一个访问页面的次数这样的计数器,把这个计数器的值保存在Session当中。
中间件的编写
'use strict';
module.exports = options => {
return async (ctx, next) => {
if (ctx.session.controller) {
ctx.session.controller++;
} else {
ctx.session.controller = 1;
}
await next();
};
};
还需要手动的挂载中间件。挂载方法是打开/config/config.default.js文件。
config.middleware = [ 'counter' ];
这样配置之后,就是全局的中间件,无论访问那个页面,计数器都会增加。
router中间件的编写
如果只想让访问/gettest时,计数器才会增加,这时候就要使用在router(路由)中配置中间件的使用。直接在\app\router.js 中实例化和挂载。
我们先去掉全局的挂载,然后到router.js文件中挂载单个路由。
/config/config.default.js文件
config.middleware = [];
router.js文件添加
const counter = app.middleware.counter();
//router.get('/gettest', controller.home.gettest); //原来写法
router.get('/gettest', counter, controller.home.gettest);//添加中间件写法
这时候在访问127.0.0.1:7001,计数器虽然会显示,但是不会增加。访问127.0.0.1:7001/gettest路径的时候才会继续增加。也就是说中间件才会起作用。在实际开发中中间件还是有很多用处的,比如日志的记录、比如所有页面的Gzip压缩展示、比如全局埋点的使用。
学习日期:2021/12/24
视频参考:www.bilibili.com/video/BV1s3…
仅供个人学习和记录