当抛出错误时,将响应重定向到HTTP 500错误处理程序

Redirecting a response to an HTTP 500 error handler, when an error is thrown

本文关键字:错误 HTTP 重定向 处理 程序 出错 响应      更新时间:2023-09-26

如果一些底层组件抛出错误,我如何得到通知express.js堆栈?我正在使用一个底层数据访问框架,它偶尔会抛出特定的错误(例如,当在DB中找不到记录时)。

express.js是否提供了直接跳转到500错误处理程序的方法,并将响应重定向到相应的页面?不幸的是,我没有看到使用标准express.js方式的直接方法(使用next中间件处理程序),除非我使用try…到处捕获,这也是一些开销

通常你不会重定向到500页。你要做的就是让异常传播,如果抛出异常,node.js会为你做一个500。

我有一些相关的规则。也许你会发现它们很有用:

    永远不要在异步代码(如node.js)中使用try/catch。错误通常通过提供的回调函数的第一个参数传播。
  • 如果我需要返回一个错误给用户,我使用res.send('Error', 500);

给那些像我一样还在寻找答案的人:

1-使用express默认errorHandler中间件

app.use(express.errorHandler());

2-提供自己的错误处理中间件:

app.use(function (error, req, res, next) {
            res.status(500);
            res.render("500.jade", {});
        });

理想情况下,您希望在DEV上使用第一个选项,而在PROD上使用第二个选项

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}
app.use((function (error, req, res, next) {
  res.status(500);
  res.render("500.jade", {});
});
注意:错误处理应该策略性地把放在app.router
下面。