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