小编典典

Node.js + Express.js 应用的错误处理原则?

all

与其他框架相比,Node.js+
Express.js应用程序中的错误报告/处理似乎有所不同。我是否正确理解它的工作原理如下?

A)通过将错误作为回调函数的参数接收来 检测 错误。例如:

doSomethingAndRunCallback(function(err) { 
    if(err) { … }
});

B)通过调用 next(err) 报告 MIDDLEWARE 中的错误。例子:

handleRequest(req, res, next) {
    // An error occurs…
    next(err);
}

C)通过抛出错误来 报告 ROUTES 中的错误。例子:

app.get('/home', function(req, res) {
    // An error occurs
    throw err;
});

D) 通过 app.error() 配置您自己的错误处理程序来处理错误,或使用通用的 Connect 错误处理程序 例子:

app.error(function(err, req, res, next) {
    console.error(err);
    res.send('Fail Whale, yo.');
});

这四个原则是 Node.js+Express.js 应用程序中所有错误处理/报告的基础吗?


阅读 71

收藏
2022-08-08

共1个答案

小编典典

Node.js 中的错误处理通常采用 A) 格式。大多数回调返回一个错误对象作为第一个参数或null.

Express.js 使用中间件,中间件语法使用 B) 和 E)(如下所述)。

C)如果你问我是不好的做法。

app.get('/home', function(req, res) {
    // An error occurs
    throw err;
});

您可以轻松地将上面的内容重写为

app.get('/home', function(req, res, next) {
    // An error occurs
    next(err);
});

中间件语法在get请求中有效。

至于 D)

(07:26:37 PM)tjholowaychuk:app.error 在 3.x 中被删除

TJ 刚刚确认app.error不赞成使用 E

E)

app.use(function(err, req, res, next) {
  // Only handle `next(err)` calls
});

任何长度为 4(4 个参数)的中间件都被视为错误中间件。当一个调用next(err)connect 去调用基于错误的中间件。

2022-08-08