NodeJS/MongoDB POST请求超时

问题描述:

我在这里是一种小菜,但我遇到了一个奇怪的错误,我一直试图通过邮差测试我的GET/POST请求到我的mongoDB,GET完美的作品,但POST似乎没有做任何事情,它只是永远加载并最终超时,但来自modulus.io(我托管我的数据库)的分析表示,他们在我按POST后立即收到查询。下面是相关的代码:NodeJS/MongoDB 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

看起来好像你正在从'addPost'返回响应,就像你在用户不存在'sendJsonResponse'的情况一样。你的服务器正在查询MongoDB,然后什么都不做,这可能是你的请求挂起的原因。 – cejast

+0

就是这样,我忘记了,谢谢 –

如果没有响应就意味着你忘了送东西背部。

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

Futher在帕拉姆检查你不回东西,如果它是无效的,它看起来就像你有没有错误的情况下,如果用户标识无效,也无法

也许尝试财产以后这样的:

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' 
     }) 
     } 
    } 
} 

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