在Express.js中的res.send()之后退出
我有一个相当简单的Express.js应用程序,带有一个登录组件,如果登录失败,我想尽早退出。我看到有迹象表明该应用程序没有执行此操作,也没有找到明确的答案来表明调用是否res.send()
停止任何进一步的处理。这是我现在的代码:
client.login( username, password, function( auth, client ) { if( !auth ) {
res.send( 401 );
}
// DO OTHER STUFF IF AUTH IS SUCCESSFUL
}
如果我正确地阅读了源代码,它 应该
结束请求(终止进一步的处理),但是我是Node的新手,所以我还没有准备好相信我认为的内容。归根结底,我想我主要是在寻找更可靠的资源来获得最终的答案,即我自己对不熟悉的源代码的解释。如果send()
不中止处理,正确的方法是什么?
回答:
如果使用express作为框架,则应改为调用next()。
在表达每个处理程序接收3个参数(unlinke 2为基本HTTP),其是req
,res
与next
next
是一个不带任何参数的函数,它将触发中间件链中的下一个处理程序。
如果next
使用参数调用,则无论该参数的类型如何,该参数都将被解释为错误。
其签名为next([error])
。当next被错误调用时,它而不是调用中间件链中的next处理程序,而是调用错误处理程序。您应该在该错误处理程序中处理401响应代码。请参阅此以获取有关Express中错误处理的更多信息。
编辑:作为 评论,只是要求next()
将
停止当前的执行,但它会调用上的下一个中间件。较好的做法是使用它return next()
来防止Node进一步抛出错误(例如can't set
headers after they are sent-错误)。这包括以上常见的错误抛出建议:
return next(new Error([error]));
以上是 在Express.js中的res.send()之后退出 的全部内容, 来源链接: utcz.com/qa/420812.html