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

标签 node.js express

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/

相关文章:

node.js - 值没有被插入到 PostgreSQL 数据库中

javascript - Signalr Core 1.0.3 - 在页面刷新时保持连接

javascript - 中间件运行两次

javascript - node.js - 静态文件 CSS/JS 在 express 中不起作用

mysql - 我什么时候应该使用 mongoDB 而不是关系数据库

node.js - 在 ubuntu 12.04 上安装 nodejs 和 npm 后找不到 .npmrc 文件

Node.js如何设置服务器环境PORT和NODE_ENV?

node.js - 如何使用 Electron 运行tensorflow.js?

javascript - Express 中的路由参数为空

node.js - 动态数据 Express.JS 的缓存控制