Node.js+ Express.js 中的错误报告/处理似乎有所不同应用程序与其他框架相比。我是否正确理解它的工作原理如下?
A) 检测错误,方法是接收它们作为回调函数的参数。例如:
doSomethingAndRunCallback(function(err) {
if(err) { … }
});
B) 报告 MIDDLEWARE 中的错误,方法是调用 next(err)。示例:
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
。
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 is removed in 3.x
TJ 刚刚确认 app.error
已被弃用,取而代之的是 E
E)
app.use(function(err, req, res, next) {
// Only handle `next(err)` calls
});
任何长度为 4(4 个参数)的中间件都被视为错误中间件。当调用 next(err)
时,connect 会调用基于错误的中间件。
关于node.js - Node.js + Express.js 应用的错误处理原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151487/