与其他框架相比,Node.js + Express.js应用程序中的错误报告/处理似乎有所不同.我是否理解它的工作原理如下?
A) 通过接收它们作为回调函数的参数来检测错误.例如:
doSomethingAndRunCallback(function(err) {
if(err) { … }
});
Run Code Online (Sandbox Code Playgroud)
B) 通过调用next(err)在MIDDLEWARE中报告错误.例:
handleRequest(req, res, next) {
// An error occurs…
next(err);
}
Run Code Online (Sandbox Code Playgroud)
C) 通过抛出错误报告 ROUTES中的错误.例:
app.get('/home', function(req, res) {
// An error occurs
throw err;
});
Run Code Online (Sandbox Code Playgroud)
d) 处理通过配置通过app.error自己的错误处理的错误()或使用通用连接错误处理程序.例:
app.error(function(err, req, res, next) {
console.error(err);
res.send('Fail Whale, yo.');
});
Run Code Online (Sandbox Code Playgroud)
这四个原则是Node.js + Express.js应用程序中所有错误处理/报告的基础吗?
Ray*_*nos 183
Node.js中的错误处理通常是格式A).大多数回调都返回一个错误对象作为第一个参数或null
.
Express.js使用中间件,中间件语法使用B)和E)(如下所述).
C)如果你问我,这是不好的做法.
app.get('/home', function(req, res) {
// An error occurs
throw err;
});
Run Code Online (Sandbox Code Playgroud)
您可以轻松地将上述内容重写为
app.get('/home', function(req, res, next) {
// An error occurs
next(err);
});
Run Code Online (Sandbox Code Playgroud)
中间件语法在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
});
Run Code Online (Sandbox Code Playgroud)
任何长度为4(4个参数)的中间件都被视为错误中间件.当一个调用next(err)
connect go并调用基于错误的中间件时.
Nis*_*hth 11
Joyent的人们已经发布了一篇非常有见地的最佳实践文档.任何Node.js开发人员必读的文章.