Express 4错误处理中间件未被命中



使用Express 4我正在努力获得自定义错误处理中间件的工作。

我正在使用NPM包express-async-errors来处理异步错误,但是我的错误处理程序不会被异步或同步调用击中。

在自己的文件中这样定义路由:

module.exports.set = (app, apiVersion) => {
app.get(
`${apiVersion}/User/iscool`, UserTest.TheUserTestWorks,
);
app.get(
`${apiVersion}/User/error`, UserTest.TheUserTestThrowAnErrorSynchronously,
);
app.get(
`${apiVersion}/User/AsyncError`, UserTest.TheUserTestThrowAnErrorAsync,
);
};

并在index.js中添加如下:

fs.readdir("./routers", (err, routes) => {
routes.map((route) => {
const module = require(`./routers/${route.split(".").slice(0, -1).join(".")}`);
module.set(app, apiVersion);
return route;
});
return true;
});

中间件定义如下:

const Sentry = require("@sentry/node");
function genericExceptionHandlerMiddleware(err, req, res, next) {
Sentry.captureException(err);
res.status(500).send("An unknown error occurred");
next(err);
}
module.exports = genericExceptionHandlerMiddleware;

并像这样添加在Index.js的底部,就在模块之前。Exports = app:

app.use(genericExceptionHandlerMiddleware);

如果我在上面列出的路由定义的文件中添加app.use,它确实可以工作,但是我希望它适用于所有的路由。

据我所知,没有其他中间件会吞下异常。

进程控制台显示异常被击中时,它被添加到index.js,但似乎不运行代码(如果我添加console.log,它不记录)。当使用路由添加到文件末尾时,它会记录日志。

问题非常简单——函数fs。Readdir是异步的,所以即使app.use在最后被调用,它显然不是在各种路由器设置好之后才运行的。

最新更新