我有Express.js实例和几个我想在某些函数中包装的路由。例如:Express.js - 在“装饰器”中包装每个中间件/路由
const wrapper = (route) => {
return (req, res, next) => {
let result = route(req, res, next);
// do some independent processing
}
};
app.get('/', wrapper((req, res, next) => {
// respond to request somehow
}));
虽然这工作得很好,我不喜欢这个主意,显式调用wrapper
上每路线或中间件需要这样的处理。
有没有什么办法能够包裹在某些包装每一个需要的路由/中间件(假设wrapper
功能,可以检查该路由/中间件需要被包裹)隐式(通过Express.js
扩展,猴子打补丁或一些特殊中间件)?
UPDATE:
更多固体例子。假设我想制作一个async
路由器功能。但我不想在每个路线功能中发现错误。所以我包裹起来:
const wrapper = func => (req, res, next) => {
const promise = func(req, res, next);
if (promise.catch) {
promise.catch(err => next(err));
}
next();
};
app.get('/one', wrapper(async (req, res, next) => {
// respond to request somehow
}));
app.get('/two', wrapper(async (req, res, next) => {
// respond to request somehow
}));
app.get('/three', wrapper(async (req, res, next) => {
// respond to request somehow
}));
// and so on...
app.use((err, req, res, next) => {
// do something with intercepted error
});
这明确wrapper
所有455元其实是我想摆脱的东西。
是您运行一些代码的最终目标上REQ添加的东西? – robertklep
不,我的目标是装饰路由器功能,这样我就可以得到直接的响应结果(例如,返回Promise),并用它做一些事情。 – Nevertheless