我正在编写要在路由级别应用的中间件,如下所示:
awk -F, -v RS='\r?\n' 'NR>1 { system("mkdir -p dir"$2"; mv "$1"-* dir"$2) }' dataframe.csv
所以我可以根据请求做一些事情。但是我还需要捕获错误才能进行一些特殊处理。我知道以后可以像这样添加处理程序:
router.get('/foo', myMiddleware, (req, res) => { ... });
就可以了。
但是我的问题是,有没有办法拥有一个可以完成所有这些工作的中间件,所以我不需要两点集成?我尝试在中间件中调用... (req, res) => { ... }, myErrorHandler);
,但似乎从未调用过它。
答案 0 :(得分:0)
Express带有built-in error handler,可解决应用程序中可能遇到的任何错误。默认的错误处理中间件功能已添加到中间件功能栈的末尾。
x
答案 1 :(得分:0)
最后,我通过编写包装实际处理程序的辅助函数来解决了这个问题。看起来像这样:
function checkPage(handler: express.RequestHandler) {
return async (req: express.Request, res: express.Response, next: express.NextFunction) => {
let _write = res.write;
res.write = chunk => {
if (req.query.verbose) {
return _write.call(res, `<p>${chunk}</p>`);
} else {
return true;
}
}
try {
await handler(req, res, next);
res.write('<hr/><p style="color:green;"><b>happy</b></p>');
} catch (err) {
res.write(`<p style="color:red;">${err}</p>`);
res.write('<hr/><p style="color:red;"><b>SAD!</b></p>')
}
res.end();
}
}
然后在我的路由处理程序中,我就这样使用它:
router.get('/foo', checkPage(async (req, res, next) => {
...
res.write('stuff');
...
}));