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

A) Detect个错误,将它们作为回调函数的参数接收.例如:

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

B) Report通过调用next(err)在中间件中出现错误.例子:

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

C) Report通过抛出错误在路由中出现错误.例子:

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

D) Handle通过应用程序配置自己的错误处理程序.error()或使用通用连接错误处理程序.例子:

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

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

推荐答案

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

表示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)

tjholowaychuk:应用程序.错误将在3中删除.十、

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 模块错误:类型参数OT具有循环约束''

使用HTTPS从NodeJS 17.9.1升级到18.0.0后,SignalR连接失败

Mongoose查询-如何根据当前查找ID获取其他集合并将其插入到当前查找中?

验证器功能在mongoose 中不起作用

Express Web 服务器部署到 prod 但 GET 返回超时错误

构建期间 Docker 容器中的 npm 安装失败

在mongoose虚拟属性中处理异步操作

表达 js 错误处理程序在第一个之后被忽略

无法通过 NextJS 访问 HTTP 帖子中的正文

WSL2 上需要脚本运行的 NPM 包的权限被拒绝

Azure Function 在 2022 年 4 月 26 日禁用将用户字段设置为 HTTP 请求对象

自定义 Docker 容器 Github 操作无法在 /github/workspace 中找到 Node 脚本

baseurl64 缓冲区解码

在Go中,编写非阻塞代码有意义吗?

如何让should.be.false语法通过 jslint?

从 zip 文件在 AWS 中创建 lambda 函数

从 node.js 连接到 mongodb 时出现 ECONNREFUSED 错误

webpack-dev-server 找不到模块webpack

Npm postinstall 仅用于开发

AWS Lambda:如何将秘密存储到外部 API?