egg.js中的中间件

egg.js中的中间件

在这里我举例说明三种插件
  1. 框架内部中间件
  2. 应用级中间件
  3. 路由级中间件

内置中间件

内置的中间件不用设置,也不会编写,它是存在于框架本身内部的。比如
框架内置的 bodyParser 中间件,就是内置的框架中自行导入了,会自己在运行中。

应用级中间件

应用级中间件的加载步骤是继承koa框架的,洋葱模型,应用级中间件是应用在所有路由中的。

使用方法

首先说明一下应用级中间的用法,应用级。首先是要在middleware文件夹中建立文件,下面演示一下。
middleware/report.js

module.exports = function (options,app) {
    //返回一个异步的方法,这里的异步函数跟koa中间件一样的用法
    return async function print(ctx,next) {
        console.log("访问的时间 " + new Date());
        console.log("访问的ip地址 " + ctx.request.ip);
        console.log("访问的url地址 " + ctx.request.url);
        console.log("传入的参数为:" + JSON.stringify(options));
        console.log("请求头为:" + JSON.stringify(ctx.request))
        await next();
    }
}

在这里的运行步骤是这样的首先会运行eturn async function print(ctx,next) 里面的函数,然后运行完成以后一定要调用await next();这样才能匹配下面的路由。
options是传参,就是像这个中间件中传参。app就是application对象,ctx就是context对象,next就是向下面匹配的路由,就是会向下面在匹配路由就一定要有这个参数。

而且需要在config/config.default.js中配置

config.middleware = ['report'];

所有的应用级中间件的创建步骤都是这样的。

路由级中间件

路由级中间件就是在指定路由中使用的。

创建路由级中间件。

middleware/routermidd.js

module.exports = function (options,app) {
    return async function text(ctx,next) {
        console.log("测试路由级中间件");
        await next();
    }
}

路由级中间件并不需要在配置文件中注册,只要在路由匹配的使用导入就可以了

 const rou = app.middleware.routermidd(); //这个是可以添加路由级中间件的
  router.get("/news",rou,controller.news.user_index);

然后在客户端访问这个路由的时候就可以进行调用这个中间件。

中间件的优点有非常多,特别是像我这样会写爬虫代码的就有更多的好处,可以匹配是否登陆,也可以进行反爬。

如果对中间件有什么不懂的,或者是想一起讨论的可以添加我的QQ1693490575

发布了28 篇原创文章 · 获赞 14 · 访问量 6786

猜你喜欢

转载自blog.csdn.net/weixin_42304193/article/details/104619824