Egg middleware 中間件


中間件:匹配路由前、匹配路由完成做的一系列操作。
Egg是基於Koa實現的,所有Egg的中間件形式和Koa的中間件形式是一樣的,都是基於洋蔥模型。

Koa中的中間件:
https://eggjs.org/zh-cn/intro/egg-and-koa.html#middleware

Egg中的中間件:
http://eggjs.org/zh-cn/basics/middleware.html

一般來說中間件也會有自己的配置。在框架中,一個完整的中間件是包含了配置處理的。我們約定一個中間件是一個放置在 app/middleware 目錄下的單獨文件,它需要 exports 一個普通的 function,接受兩個參數:

options: 中間件的配置項,框架會將 app.config[${middlewareName}] 傳遞進來。
app: 當前應用 Application 的實例。

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

/**
 * 攔截特殊ip,防止爬蟲
 * options: 中間件的配置項,框架會將 app.config[${middlewareName}] 傳遞進來
 * app: 當前應用 Application 的實例
 * 每次路由變化都會觸發 中間件
 */
module.exports = (options, app) => {
  return async function forbidipMiddleware(ctx, next) {
    /**
     * 要屏蔽的ip
     * 1、從數據庫獲取
     * 2、從參數傳入
     */
    console.log(options);
    console.log(ctx.request.ip);
    // 獲取客戶端的ip
    var sourceIp = ctx.request.ip;
    const match = options.ip.some(val => {
      if(val == sourceIp){
        return true;
      }
    });

    if(match){
      ctx.status = 403;
      // message 接受的字符不能有中文,否則會報錯
      // ctx.message = 'Your IP has been blocked';
      ctx.body = '您的ip已經被屏蔽';
    }else{
      await next();
    }
  }
}

2、找到 config.default.js 配置當前項目需要使用的中間件以及中間件的參數

// 增加配置中間件
config.middleware = ['forbidip'];

// 給pforbidip中間件傳入的參數
config.forbidip = {
  ip: ['192.168.0.10']
}

3.注意

傳入的中間件名稱 需要與 中間件文件名 相同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM