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

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

  • 相关阅读:
    bzoj 1030 [JSOI2007]文本生成器
    Swift 学习笔记 (闭包)
    Swift 学习笔记 (函数)
    HTML 学习笔记 JQueryUI(Interactions,Widgets)
    HTML 学习笔记 JQuery(表单,表格 操作)
    HTML 学习笔记 JQuery(animation)
    HTML 学习笔记 JQuery(盒子操作)
    HTML 学习笔记 JQuery(事件)
    HTML 学习笔记 JQuery(DOM 操作3)
    HTML 学习笔记 JQuery(DOM 操作2)
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12442895.html
Copyright © 2011-2022 走看看