• 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.注意

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

  • 相关阅读:
    monads-are-elephants(转)
    程序语言简史(转)
    语法的省略不能造成编译器的歧义
    scala getter and setter
    隐式类型转换
    java 调用 scala
    列表的操作
    Scala HandBook
    Scala 高级编程练习
    Net 2.0 C# 专用的只读类Tuple
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12442895.html
Copyright © 2020-2023  润新知