NodeJS / MongoDB POST请求超时

时间:2016-11-17 23:51:56

标签: node.js mongodb postman modulus.io

我有点像菜鸟但是我遇到了一个奇怪的错误,我一直试图通过Postman测试我的mongoDB的GET / POST请求,GET工作得很好但POST似乎没有做什么,它只是永远加载永远,并最终超时,但来自modulus.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); 

Also, for better understanding, I've recorded a short video of it

1 个答案:

答案 0 :(得分:2)

如果没有回应,则意味着您忘记发回信息。

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

在参数检查中,如果它无效,你就不会返回一些内容,看起来你没有错误的情况,如果用户标识无效,它也会失败

也许尝试这样的事情:

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),则应将其记录在错误处理程序中。