egg.js中的中间件
在这里我举例说明三种插件
- 框架内部中间件
- 应用级中间件
- 路由级中间件
内置中间件
内置的中间件不用设置,也不会编写,它是存在于框架本身内部的。比如
框架内置的 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);
然后在客户端访问这个路由的时候就可以进行调用这个中间件。