在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),其是reqresnext

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

回到顶部