Javascript 为什么我们要在express中返回状态代码和响应?

Javascript 为什么我们要在express中返回状态代码和响应?,javascript,node.js,express,Javascript,Node.js,Express,因此,我目前正在学习node.js和express,我遇到了以下问题: exports.checkBody = checkBody = (req, res, next) => { if (!req.body.name || !req.body.price) { // Return statement is here return res.status(400).json({ status: "fail", message: &

因此,我目前正在学习node.js和express,我遇到了以下问题:

exports.checkBody = checkBody = (req, res, next) => {
  if (!req.body.name || !req.body.price) {
    // Return statement is here
    return res.status(400).json({
      status: "fail",
      message: "Please add a name and price"
    })
  }
  next();
}
为什么我需要把return语句放在这里,因为当我删除return时,它的工作原理完全相同

这是路线

router.post(tourController.checkBody, tourController.createTour);

因为
return
停止函数的执行。如果没有返回,则返回响应,但这并不意味着函数停止执行

假设您有某种身份验证中间件,用于检查用户是否有效,然后返回一个错误,或者使用
next()


现在您不再使用
return
。您在客户机上得到一个被拒绝的响应,但在服务器端代码仍然被执行。我希望你明白我的意思。这也许不是最好的例子,但是。。。是。

在这种情况下,
返回
用于退出函数的效果,而不是用于有效地返回值。与此相比,有些人更喜欢将其作为一种风格选择:

res.status(400).json({
  status: "fail",
  message: "Please add a name and price"
})
return

如果您完全删除
return
,将调用
next()
,并且下一个处理程序将运行,这通常在您已经响应之后是不正确的,尤其是在这种情况下,正在实现的中间件是验证,当验证失败时,应该停止路由运行


我个人更喜欢更明确的单独的
返回
,以避免这种类型的混淆,但现在它不再像承诺和异步+等待那样作为选项出现了。

返回的原因是你不必执行
下一步()
如果检测到错误

返回值并不重要,因为
res.status()
将响应发送给客户端。所以这实际上只是一个简写

exports.checkBody = checkBody = (req, res, next) => {
  if (!req.body.name || !req.body.price) {
    res.status(400).json({
      status: "fail",
      message: "Please add a name and price"
    });
    return;
  }
  next();
}

所以,您想知道为什么不检查输入是否有效,如果没有设置,为什么不返回错误?返回退出…如果删除
return
语句,如何将错误消息发送回客户端?@Barmar:With
res.status(400).json(…)
。哇,这对我帮助很大!谢谢