中间件(Middleware)

中间件:匹配路由前、匹配路由完成做的一系列的操作。 Egg 是基于 Koa 实现的,所以 Egg 的中间件形式和 Koa 的中间件形式是一样的,都是基于洋葱圈模型

一般来说中间件也会有自己的配置。在框架中,一个完整的中间件是包含了配置处理的。我们约定一个中间件是一个放置在 app/middleware 目录下的单独文件,它需要exports 一个普通的 function,接受两个参数:

  • options: 中间件的配置项,框架会将 app.config[${middlewareName}] 传递进来。

  • app: 当前应用 Application 的实例。

小案例(限制ip)

1、app/middleware下面新建forbidip.js 内容如下:

module.exports = (options, app) => {
 return async function forbidipMiddleware(ctx, next) {

console.log(options);
console.log(ctx.request.ip);

var sourceIp=ctx.request.ip;
 const match = options.ip.some(val =>{
  if(val==sourceIp){
    return true;
 }
  });

  if (match) {
    ctx.status = 403;
    ctx.message = 'Go away, robot.';
  } else {
     await next();
   }

   }
};

2、找到config.default.js配置当前项目需要使用的中间件以及中间件的参数

//中间件
config.middleware = ['forbidip'];

config.forbidip = {
  ip: [
    '127.0.0.1',
    '192.168.0.1'
  ],
};

Last updated

Was this helpful?