我有一个关于 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/