Javascript 为什么我们要在express中返回状态代码和响应?
因此,我目前正在学习node.js和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: &
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:Withres.status(400).json(…)
。哇,这对我帮助很大!谢谢