res.json () создает CastError - PullRequest
       9

res.json () создает CastError

0 голосов
/ 11 апреля 2019

При использовании res.json () с аргументом это приводит к тому, что CastError: CastError: сбой приведения к ObjectId для значения «undefined» по пути «_id» для модели «Post»

Если я использую просто rest.status (), res.sendStatus () или res.json () без аргументов работает без проблем.

exports.createPost = async (req, res, next) => {
  try {
    errorsIsEmpty(validationResult(req));
    const { communityId } = req.params;
    const { type } = req.query;
    const { title, content } = req.body;
    const user = await User.findById(req.userId)
    const community = await Community.findById(communityId);
    const banned = await community.authorized(req.userId)
    if(banned){
      ////// This line causes the problem //////
     return res.status(403).json({})
    }
    else {
      let post;
      if (type === 'text') {
      post = new Post({
        title,
        content,
        authorId: req.userId,
      });
    } else if (type === 'image') {
      if (!req.file) {
        const error = new Error('No image provided.');
        error.statusCode = 422;
        throw error;
      }
      const imageUrl = req.file.path;
      post = new Post({
        title,
        imageUrl,
        authorId: req.userId,
      });
    }
    await post.save();
  ////// This line works//////
    res.status(201).json({ postId: post._id });
    }
    
  } catch (err) {
    console.log(err);
    next(err);
    // errorFunc(err, next);
  }
};

Значение r "undefined" в пути "_id" для модели "Post" '

1 Ответ

0 голосов
/ 11 апреля 2019

Ваш _id является строкой, но это должен быть тип ObjectId. Я полагаю, вы используете мангуст. Вам нужно импортировать / требовать мангуста, а затем обернуть значение _id в ObjectId

const mongoose = require('mongoose');

const ObjectId = mongoose.Types.ObjectId;

// in your route handler
  await post.save();
  ////// This line works//////
  res.status(201).json({ postId: ObjectId(post._id) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...