node.js – 在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
}

如果我正确地读取源代码,它应该结束请求(中止进一步的处理),但是我是新的节点,所以我还没有准备好相信我正在阅读的内容。要煮掉它,我想我主要是从一个更可靠的来源寻找一个确定的答案,我自己的解释不熟悉的源代码。如果send()不会中止处理,那么正确的方法是什么?

解决方法

如果您使用express作为框架,则应该调用next()。

express中的每个处理程序都接收3个参数(基本http的unlinke 2),这些参数是req,res和next

接下来是一个函数,当没有参数调用时,它将触发中间件链中的下一个处理程序。

如果使用参数调用next,则此参数将作为错误解释,而不管该参数的类型如何。

其签名是下一个([错误])。当下一个调用时出现错误,而不是调用中间件链中的下一个处理程序,它调用错误处理程序。您应该处理该错误处理程序中的401响应代码。有关Express中错误处理的更多信息,请参阅this

编辑:@Baptiste Costa评论说,只需调用next()就不会停止当前的执行,但是它会调用一个中间件。好的做法是使用return next()来防止Node进一步抛出错误(比如发送错误后不能设置头文件)。这包括上述错误抛出的建议,这是常见的:

return next(new Error([error]));

[我的道歉不发表评论,还没有足够的声誉]

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...