我正在使用nodejs并表示要创建一个Web应用程序。
我可以使用以下代码处理“ / api / healthtips /:htip”:

app.get('/api/healthtips/:htip', function (req, res) {
return HealthTipModel.find({"_id": new mongoose.Types.ObjectId(req.params.htip)}, function (error, healthTip) {
    if (!error) {
        return res.send(healthTip);
    }
});


});

我在浏览器中签入,并且json返回。

但是我无法使用代码处理“ api /:htip / feedback”

app.post('api/:htip/feedback', function(req, res) {
var healthTip = HealthTipModel.find({"_id": new mongoose.Types.ObjectId(req.params.htip)}, function(error, healthTip) {
    if (!error) {
        return healthTip;
    }
});
if (healthTip._id) {
    var healthTip = new HTipFeedbackModel({
        type: req.body.type,
        comment: req.body.comment,
        healthTip: healthTip._id
    });
}


});

当我使用jquey.post访问此路径时,它返回404。

为什么?有人给我一个线索吗?

最佳答案

您不能仅return,因为它是异步的。
您应该使用回调:

app.post('/api/:htip/feedback', function(req, res) {

  HealthTipModel.findById(req.params.htip, function(error, healthTip) {

    if (!error) {

        var newhealthTip = new HTipFeedbackModel({
            type: req.body.type,
            comment: req.body.comment,
            healthTip: healthTip._id
        })

        newhealthTip.save(function(error){

          if (!error) {
             res.send(healthTip);
          } else {
            res.status(400).send('Cannot save')
          }

        });

    } else {
      res.status(404).send('Not found')
    }
  });

});

关于node.js - express无法像“api/:htip/feedback”那样处理网址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21253324/

10-13 04:21