【问题标题】:Nodejs difference between 'res.json(..)' and 'return res.json(..)''res.json(..)'和'return res.json(..)'之间的Nodejs区别
【发布时间】:2016-06-09 13:05:54
【问题描述】:

我正在学习Nodejs,但我并不完全了解回报。例如,next() 在很多情况下建议返回,以确保触发后停止执行(Reference)。但是,对于简单响应之类的情况,是否需要return,有什么区别和首选:

res.json({ message: 'Invalid access token' });

对比

return res.json({ message: 'Invalid access token' });

【问题讨论】:

  • 上面的代码是什么函数?没有上下文就不可能回答这个问题。
  • 该代码用于简单的身份验证功能,该功能返回对身份验证尝试的响应。
  • return 下面的代码不会执行 :-) 仅此而已。我更喜欢不返回 next() 因为 return 语句应该根据this 规则保持一致
  • @eYe:展示(有细节),不要告诉。

标签: javascript node.js syntax


【解决方案1】:

return 用于停止执行。它通常用于根据条件进行某种形式的提前返回。

忘记返回通常会导致函数继续执行而不是返回。这些示例是典型的快速中间件示例。

如果中间件函数是这样的:

function doSomething(req, res, next){
    return res.json({ message: 'Invalid access token' });
}

结果行为将与以下内容完全相同:

function doSomething(req, res, next){
    res.json({ message: 'Invalid access token' });
}

但这种模式经常被实现:

function doSomething(req, res, next){
    if(token.isValid){
        return res.json({ message: 'Invalid access token' }); // return is very important here
    }
    next();
}

正如您在此处看到的,当省略返回且令牌无效时,该函数将调用 res.json() 方法,然后继续执行 next() 方法,这不是预期的行为。

【讨论】:

  • 谢谢。所以从技术上讲,如果我足够小心,我就不必在不需要提前返回的情况下返回?
  • 是的,从技术上讲,您不必这样做,我尝试在调用回调时始终返回。它只是消除了很多调试时间,但总是返回这个。不止一次地调用回调它以泪水告终。 :(
  • 但是为什么会这样呢?如果 res 被发送回客户端,从技术上讲,这意味着 HTTP req + res 循环完成并且执行完成。为什么 res.json() 本身不是函数终止符。
  • @aelmosalamy 技术上是的,但我们可能有拦截器或后处理器。如果您来自 java 世界,请考虑面向方面的编程等。因此,即使响应完成,服务器也可能想要执行一些后处理逻辑,例如记录或清除一些缓存或其他东西。出于这个原因,我认为 res.json() 本身并不是一个函数终止符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多