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

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

  • 相关阅读:
    J2EE13个规范--【J2EE】
    事件监听、持有对方的引用--【J2SE】
    TCP协议:服务端和客户端demo--【J2SE】
    线程:Interrupt、Sleep、Join、线程同步--【J2SE】
    1. Visual C++ 6.0 安装和使用
    无法连接虚拟设备sata0:1,因为主机上没有相应的设备
    Linux文件夹文件创建、删除
    服务器
    linux 下 apache启动、停止、重启命令
    Apache部署静态html
  • 原文地址:https://www.cnblogs.com/crazycode2/p/12442895.html
Copyright © 2011-2022 走看看