热搜: fiddler git ip 代理
历史搜索

14.Egg.js教程

游客2024-12-04 07:30:01
目录文章目录
  1. 中间件的编写
  2. 中间件的全局使用
  3. router 中间件的使用

本文主要学习 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'];

这样配置之后,就是全局的中间件,无论访问那个页面,计数器都会增加。为了看到效果。分别在appcontrollerhome.js文件的index()方法中 和 appcontrollermybj.jsindex()方法中,加入控制台输出代码。

console.log(ctx.session.counter);

然后分别访问这两个页面,每次刷新页面就会在终端看到 session 都会增加。这就说明了中间件现在的作用域是全局的。

14.Egg.js教程 1

router 中间件的使用

如果只想让访问/my时,计数器才会增加,这时候就要使用在 router(路由)中配置中间件的使用。直接在approuter.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 压缩展示、比如全局埋点的使用。以后在实战项目中,我们还会学习更多的中间件使用方法。

标签:egg.js