Node.js NodeJS快车/猫鼬路线混乱

Node.js NodeJS快车/猫鼬路线混乱,node.js,express,mongoose,Node.js,Express,Mongoose,我一定没有正确理解这里的某些内容。我的路线是这样的 function(req,res){ var thingId = validate.thingId(req.body) ? req.body.thingId : res.send(400,'Invalid Thing'); var newBlock = new Block({ thing : mongoose.Types.ObjectId(thingId) }).save(); }

我一定没有正确理解这里的某些内容。我的路线是这样的

function(req,res){
      var thingId = validate.thingId(req.body) ? req.body.thingId  : res.send(400,'Invalid Thing');

      var newBlock = new Block({
           thing : mongoose.Types.ObjectId(thingId)
      }).save();
 }
我正在req.body.thingId中传递一个空字符串以测试验证函数。它应该返回false,服务器应该返回400错误,但是我得到了错误 “传入的参数必须是一个12字节的字符串或一个24个十六进制字符的字符串。”(这里指的是模型id)

所以很明显,newBlock仍在创建中,thingId被传递到mongoose.Types.ObjectId函数中


我当时的印象(可能是错误的)是调用res.send本质上类似于“return”,之后代码就不会运行了。我看不出这是一个异步问题,有人能给我指出正确的方向吗?

问题是res.send()不从函数返回执行。如果验证失败,您应该使用代码块并返回。

我按照user3334561所说的做了,这很有效

   var thingId;

   if (validate.thingId(req.body)) thingId = req.body.thingId;
   else return res.send(400,'Invalid Thing');