JianghuJS自定义中间件
JianghuJS 中间件是啥
在Egg.js中,中间件通过app.middleware
属性添加到应用程序中。中间件以函数形式存在,每个中间件都可以接收两个参数:ctx(Context对象)和next(下一个中间件)。当一个HTTP请求被发送到应用程序时,中间件会先处理请求,然后再将请求传递给下一个中间件,最终响应请求
中间件的处理逻辑可以在ctx对象中设置和读取请求的状态和信息,同时,也可以通过next()函数调用下一个中间件,实现中间件的“流水线”作用。当所有中间件都处理完后,请求得到响应并返回给客户端。
江湖js如何自定义中间件
配置
- 配置文件:
/config/middlewareConfig.js
middlewareConfig
中的配置,会自动合并到config
配置中,框架会自动按照一下数组顺序执行相应的中间件方法;
执行顺序
module.exports.middleware = [
// cache
'prepareCache',
// /upload/*
'downloadUserInfo',
// /page/*
'pagePackage', 'pageUserInfo', 'pageAuthorization',
// /pageDoc/*
'pageDocPackage', 'pageDocUserInfo', 'pageDocAuthorization',
// /resource/*
'httpPackage', 'httpUserInfo', 'httpAuthorization', 'httpResourceHook'
];
执行条件
middlewareMatch
按照条件判断是否执行该中间件,不添加在Match
的中间件会默认执行;
module.exports.middlewareMatch = {
pagePackage: {
match(ctx) {
// url 格式符合 /appId/page/pageId
return ctx.request.method === 'GET'
&& ctx.request.path.startsWith(`/${ctx.app.config.appId}/page/`);
},
},
...
}
创建中间件
/app/middleware
目录下,每一个js就是一个中间件,文件名与上方middleware
配置同名;
├── middlewareUtil
│ ├── packageUtil.js
│ └── userInfoUtil.js
├── downloadUserInfo.js
├── httpAuthorization.js
├── httpPackage.js
├── httpResourceHook.js
├── httpUserInfo.js
├── pageAuthorization.js
├── pageDocAuthorization.js
├── pageDocPackage.js
├── pageDocUserInfo.js
├── pageHook.js
├── pagePackage.js
├── pageUserInfo.js
├── socketAuthorization.js
├── socketPackage.js
├── socketPackageRecord.js
├── socketResourceAfterHook.js
├── socketResourceBeforeHook.js
├── socketUserInfo.js
├── xiaochengxuAuthorization.js
├── xiaochengxuPackage.js
├── xiaochengxuPackageRecord.js
├── xiaochengxuPageAuthorization.js
├── xiaochengxuPagePackage.js
├── xiaochengxuResourceAfterHook.js
├── xiaochengxuResourceBeforeHook.js
└── xiaochengxuUserInfo.js