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.jsindex()方法中,加入控制台输出代码。

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压缩展示、比如全局埋点的使用。以后在实战项目中,我们还会学习更多的中间件使用方法。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:
1. 本站所有文章教程及资源素材均来源于网络与用户分享或为本站原创,仅限用于学习和研究。
2. 如果内容损害你的权益请联系客服QQ:1642748312给予处理。
码云笔记 » 14.Egg.js教程-Egg.js中间件的编写

发表评论

IT互联网行业相关广告投放 更专业 更精准

立即查看 联系我们