javascript - 为什么 Express 不实现 Node.js 风格的回调?

标签 javascript node.js express callback q

我有一个关于 API 的问题。为什么express不实现Node.js风格的回调,即错误优先回调

例如,router.METHOD :

router.get('/', function(req, res){
  res.send('hello world');
});

此外,我还看到了这个Error handling :

app.use(function (err, req, res, next) {
  // logic
})

那么,我的问题是:在添加上述错误处理中间件后,我可以将我的代码视为如下吗?

router.get('/', function(err, req, res, next){
  res.send('hello world');
});

如果是这样,我可以使用 Q.denodeify将回调风格转换为 promise 风格,对吗?因为 Q.denodeify,如所述 here ,仅处理 Node.js 风格 (err, result) 回调 API

最佳答案

Express 路由处理程序不能表示为 promise ,因为 promise 运行一次,而路由处理程序需要运行多次

Express 实际上会在适当的时候使用 Node 风格的回调——例如下一步(错误)

Then, my question is: after add the Error Handling middleware as above, can I regard my code as following?

你可以,但你首先会击败错误处理程序的点。在传统的 Express 应用中,当请求因错误而失败时,可以安全地跳过其后的路由处理程序,以便将其传递给错误处理程序。

如果您将所有路由编写为错误处理程序,那么处理成功的代码部分和处理失败的部分之间没有语义区别。如果路由处理程序抛出或调用 next(err),则错误将传递到下一个匹配的应用程序路由处理程序,而不是传递到专用错误处理程序。

顺便说一下,这更多的是关于 Connect 的问题。 ,Express 所基于的 HTTP 中间件实现。

关于javascript - 为什么 Express 不实现 Node.js 风格的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42924123/

相关文章:

javascript - 为什么作者在文件前使用波形符?

node.js - Sequelize : Associating two columns in one table. 添加关联后,插入行时出现错误

javascript - node.js req.body 在express 4.16.X、body-Parser 1.X 中未定义

javascript - 使用谷歌网站翻译器自动翻译网页

javascript - 转换对象数组的最有效方法

javascript - CSS Div 覆盖其后面的其他 div

node.js - 恢复 Brain.js 神经网络模型的训练

javascript - 如何向 jQuery 插件添加实用方法?

javascript - 如何对快速路由器路由进行单元测试

layout - 在 Express/EJS 中,如何更改默认布局?