在express中,我们可以调用next()
或next(Error)
方法来调用下一个函数。
我通过实现以下代码犯了一个初学者错误:
if(error) {
next(new Error('This is an error');
}
console.log("Don't display this if error.");
在调用next
方法后,在控制台中打印文本时出现大问题。我不得不通过以下方式更改代码:
if(error) {
return next(new Error('This is an error');
}
console.log("Don't display this if error.");
现在,它工作正常。
我的问题:在退货声明之外调用下一个方法有什么好处吗? 我的理解是,这将创建一个很难调试/维护的多路径执行。
答案 0 :(得分:0)
可能会帮助您按照以下方式考虑您的代码:
if(error) {
// Let somebody else do something with the error.
next(error);
// Don't to anything else here.
return;
}
console.log("No error, then do something here");
使用return next(error)
只是一种较短的写作方式。
答案 1 :(得分:0)
要回答原始问题,是的,不返回next()是有价值的。具体示例:您有一个快速应用程序,并定义了要使用的错误处理程序中间件函数。现在,在该函数中,您将错误附加到connect-flash以便稍后在jade模板中检索,并通过Bootstrap通知显示给用户。
现在,您不希望通过返回next()来保留原始回调执行。假设您向服务器提交了一个表单,发生错误,现在您必须在返回浏览器之前重新呈现您的jade模板中的数据。因此,您仍将继续执行并返回原始函数(req,res,next)并呈现响应,但是通过connect-flash Jade也将注入错误消息,而您只需要“出现错误时的受控渲染”而非而不是将所有问题汇集到一个常见的“Opps something broke”页面。
同样调用next()只是调用执行管道上的下一个中间件(因此,为什么重要的是你声明app.use中间件的顺序)。您可以通过node.js中间件进行身份验证,也可以执行许多令人惊叹的事情。在你的情况下,使用err调用Next将绕过所有正常的中间件并执行4 params错误处理程序(根据快速规范)。