2016-11-17 169 views
0

我在這裏是一種小菜,但我遇到了一個奇怪的錯誤,我一直試圖通過郵差測試我的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

就是這樣,我忘記了,謝謝 –

回答

2

如果沒有響應就意味着你忘了送東西背部。

在你的代碼中,如果它全部成功,它將不會返回任何東西。

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)處理所有錯誤,則應將它們記錄在錯誤處理程序中。