zoukankan      html  css  js  c++  java
  • 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.注意

    传入的中间件名称 需要与 中间件文件名 相同

  • 相关阅读:
    20200630(A--E)题解 by 王文硕
    20200629(A--E)题解 by 章思航
    GC垃圾回收
    Codeforces Round #629 (Div. 3) A、B、C
    AtomicInteger的Increment方法的自己实现。
    两个线程,一个输出字母一个输出数字,输出A1B2C3....Z26
    NIO记录
    mysql优化相关
    一些Nginx的Linux命令和conf配置文件
    docker记录
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12442895.html
Copyright © 2011-2022 走看看