与其他框架相比,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 应用程序中所有错误处理/报告的基础吗?
Node.js 中的错误处理通常采用 A) 格式。大多数回调返回一个错误对象作为第一个参数或null.
null
Express.js 使用中间件,中间件语法使用 B) 和 E)(如下所述)。
C)如果你问我是不好的做法。
您可以轻松地将上面的内容重写为
app.get('/home', function(req, res, next) { // An error occurs next(err); });
中间件语法在get请求中有效。
get
至于 D)
(07:26:37 PM)tjholowaychuk:app.error 在 3.x 中被删除
TJ 刚刚确认app.error不赞成使用 E
app.error
E)
app.use(function(err, req, res, next) { // Only handle `next(err)` calls });
任何长度为 4(4 个参数)的中间件都被视为错误中间件。当一个调用next(err)connect 去调用基于错误的中间件。
next(err)