【发布时间】: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()' 就可以了!