Время ожидания запроса POST для NodeJS/MongoDB

Я вроде как нуб, но я столкнулся со странной ошибкой, я пытался проверить мои запросы GET/POST к моей mongoDB через Postman, 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); 

Кроме того, для лучшего понимания я записал короткое видео об этом

1 ответ

Решение

Если ответа нет, значит, вы забыли что-то отправить назад.

В вашем коде, если все будет успешно, ничего не вернется.

Далее при проверке параметров вы не вернете что-то, если оно недопустимо, похоже, что у вас нет ошибки, а если идентификатор пользователя недействителен, то также произойдет сбой.

Может быть попробовать что-то вроде этого:

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) для всех ваших ошибок вы должны записать их в свой обработчик ошибок.

Другие вопросы по тегам