我有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