14.Egg.js教程-Egg.js中间件的编写
本文主要学习 Egg.js 中的中间件。Egg 是对 Koa 的二次封装,所以中间件这部分和 Koa 框架是一样的,也遵循洋葱圈模型。
中间件的编写
Egg.js 约定中间件要写在/app/middleware文件夹下面,如果没有middleware可以自己建立。在文件夹下,新建一个counter.js的文件。我们来作一下访问页面的次数这样的计数器。由于我们还没学数据库,所以把这个计数器的值保存在 Session 当中。
module.exports = options =>{
return async (ctx,next)=>{
if(ctx.session.counter){
ctx.session.counter++
}else{
ctx.session.counter=1
}
await next();
}
};
中间件的全局使用
写完这个之后,我们需要手动的挂载中间件。挂载方法是打开/config/config.default.js文件。
config.middleware = ['counter'];
这样配置之后,就是全局的中间件,无论访问那个页面,计数器都会增加。为了看到效果。分别在\app\controller\home.js文件的index()方法中 和 \app\controller\mybj.js的index()方法中,加入控制台输出代码。
console.log(ctx.session.counter);
然后分别访问这两个页面,每次刷新页面就会在终端看到 session 都会增加。这就说明了中间件现在的作用域是全局的。

router 中间件的使用
如果只想让访问/my时,计数器才会增加,这时候就要使用在 router(路由)中配置中间件的使用。直接在\app\router.js 中实例化和挂载。
我们先去掉全局的挂载,然后到router.js文件中挂载单个路由。
'use strict';
module.exports = app => {
const counter = app.middleware.counter()
const { router, controller } = app;
router.get('/', controller.home.index);
router.get('/my', counter, controller.mybj.index);
};
这时候在访问首页,计数器虽然会显示,但是不会增加。只有在访问/my路径的时候才会继续增加。也就是说中间件才会起作用。
我这里使用的中间件非常简单,在实际开发中中间件还是有很多用处的,比如日志的记录、比如所有页面的 Gzip 压缩展示、比如全局埋点的使用。以后在实战项目中,我们还会学习更多的中间件使用方法。
以上关于14.Egg.js教程-Egg.js中间件的编写的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 14.Egg.js教程-Egg.js中间件的编写
微信
支付宝