0

我在这里有点菜鸟,但我遇到了一个奇怪的错误,我一直在尝试通过 Postman 测试我对 mongoDB 的 GET/POST 请求,GET 工作得很好,但 POST 似乎没有做任何事情,它只是永远加载并最终超时,但是来自模数.io(我托管我的数据库的地方)的分析表明他们在我按下 POST 后立即收到了一个查询。以下是相关代码:

我的后控制器:

 `module.exports.postsCreateOne = function(req, res) {
  if(req.params && req.params.userid) {
    User.findById(req.params.userid)
    .exec(function(err, user) {
      if(!user) {
        sendJsonResponse(res, 404, {"message":"user not found"});
        return;
      }
      else if (err) {
        sendJsonResponse(res, 404, err);
        return;
      } 
      else {
        addPost(req, res, user);
      }
    })}`

    var addPost = function(req, res, user) {
    user.posts.unshift({
      text: req.body.text
    });}

路线:

    router.post('/posts/:userid', ctrlPosts.postsCreateOne); 

另外,为了更好地理解,我录制了一个简短的视频

4

1 回答 1

2

如果没有响应,则意味着您忘记发回某些东西。

在您的代码中,如果全部成功,它将不会返回任何内容。

进一步在参数检查中,如果无效,则不返回某些内容,看起来您没有错误情况,如果用户 ID 无效,它也会失败

也许尝试这样的事情:

const ObjectId = mongoose.Types.ObjectId
exports.postsCreateOne = function(req, res, next) {
  if (!ObjectId.isValid(req.params.userid)) {
    return res.status(400).json({
      error: 'invalid userid'
    })
  }
  User.findById(req.params.userid)
    .exec(function(err, user) {
        if (err)
          return next(err)
        if (!user) {
          return res.status(404).json({
            message: 'user not found'
          })
        }
        user.posts.unshift({
          text: req.body.text
        })
        // save something
        res.json({
          status: 'ok'
        })
      }
    }
}

你应该考虑 Promises,因为它们让你的生活更轻松。如果您使用next(err)所有错误,则应将它们记录在错误处理程序中。

于 2016-11-18T01:06:38.123 回答