【问题标题】:send response and stop further executing of code in nodejs发送响应并停止在节点 js 中进一步执行代码
【发布时间】:2016-09-05 17:43:24
【问题描述】:

我正在使用 node 创建restful api,并且在发送响应时感到困惑。

下面是示例代码:

 router.post('/', function(req, res) {

   var mobileRegex=/^\d{10}$/;

   if (!mobileRegex.test(req.body.mobile)){
         res.json({status:'success',type:false,msg:'Invalid Mobile'});
      // I dont want  further execution of code after this but still it continues and prints data not defined  
      // OR
       return res.json({status:'success',type:false,msg:'Invalid Mobile'});
      //but works if I specify return before it
  }
  var data={...};
  signupModel.createUser(data,function(err,result){
     if(err)
      {
         res.json({status:'success',type:false,msg:'....'});
      }
      else
      {
        res.json({status:'success',type:false,id:'....'});
      }
});

当我在失败的移动验证响应期间未指定返回时,它会继续进一步执行代码并在控制台中打印“数据未定义”,但无效的移动消息 json 已正确发送到客户端而没有错误跟踪。

我很困惑在 nodejs 中创建 api 时应该遵循什么正确的方法,我担心的是,一旦发送响应,就不应进一步处理请求。 此外,如果返回结束响应,我应该在所有情况下向客户端发送 json 响应时都使用 return。

我见过Nodejs difference between 'res.json(..)' and 'return res.json(..)' 线程,但它与中间件有关,但在我的情况下没有

【问题讨论】:

  • 在任何你想停止中间件执行的地方使用 return !并且不需要在 res.send() 之后调用它,只需 'return res.send()' 就可以了!

标签: node.js express


【解决方案1】:

您可以在res.json() 之后添加return 语句。 res.json() 只是设置响应。它不发送响应。

if (!mobileRegex.test(req.body.mobile)){
     return res.json({status:'success', type:false, msg:'Invalid Mobile'});
}

【讨论】:

  • 如果我在发送给客户端的每个 json 响应之后指定 return 是否正确,因为 res.json 最终会调用 res.send 但设置内容类型。
  • 正确。但是您不需要在任何地方添加 return 。例如,在您当前的代码中,您不需要在 'if - else' 中的 res.json() 之后添加 return,因为之后不会执行任何操作。
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2021-08-22
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多