Не удается прочитать свойство push undefined? Несмотря на то, что я отправляю комментарий в массив комментариев, почему я получаю эту ошибку? - PullRequest
0 голосов
/ 05 октября 2019

Я отправляю комментарий в / arms /: id / comments, как показано ниже, но всегда получая ошибку, не могу прочитать свойство push undefined

router.post("/", middleware.isLoggedIn, function(req, res) {
  arms.findById(req.params.id, function(err, armsFound) {
    if (err) {
      console.log(err);
      res.redirect("back");
    } else {
      comments.create(req.body.comment, function(err, comment) {
        if (err) {
          console.log(err);
          res.redirect("back");
        } else {
          comment.author.id = req.user._id;
          comment.author.username = req.user.username;
          comment.save();
          arms.comments.push(comment);
          arms.save();
          req.flash("success", "Successfully added comment");
          res.redirect("/arms/" + arms._id);
        }
      });
    }
  });
});

Схема оружия В руках Схема комментариев представляет собой массив, и везде в Интернете, включая stackoverflow, я обнаружил, что если я что-то помещаю в массив, то все нормально, если это что-тоиначе тогда это даст ошибку. Я также прочитал кое-что о stackoverflow, которое предложило мне использовать фактическое слово (от которого мне требуется схема комментариев) для нажатия, которое в моем случае - «комментарии», поэтому я написал «комментарии» вместо приведенного ниже кода, где написано «комментарий»но это тоже не сработало

const mongoose = require("mongoose");

const armSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  price: String,
  image: String,
  description: String,
  owner: {
    id: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "User"
    },
    username: String,
  },
  comments: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "Comment"
  }]
})

module.exports = mongoose.model("arms", armSchema);

Схема комментариев

const mongoose = require("mongoose");

const commentSchema = new mongoose.Schema({
  text: String,
  author: {
    id: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "User"
    },
    username: String
  }
})

module.exports = mongoose.model("Comment", commentSchema);

1 Ответ

0 голосов
/ 06 октября 2019

Похоже, в вашем коде arms - это модель, а не документ, поэтому arms.comments не определено. Измените его на armsFound, который находится в обратном вызове вашего findById(), решит проблему. Как то так:

armsFound.comments.push(comment);
armsFound.save();
...