0

私はちょっと初心者ですが、奇妙なバグに遭遇しました。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); 

また、理解を深めるために、短いビデオを録画しました

4

1 に答える 1

2

返信がない場合は、何かを返送するのを忘れたことを意味します。

あなたのコードでは、すべて成功した場合、何も返されません。

さらに、param チェックでは、有効でない場合は何かを返しません。エラーの場合はないようで、ユーザー 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'
        })
      }
    }
}

Promise はあなたの生活を楽にしてくれるので、Promise を検討する必要があります。またnext(err)、すべてのエラーに使用する場合は、エラー ハンドラーにログを記録する必要があります。

于 2016-11-18T01:06:38.123 に答える