NodeJS — возвращает неопределенную проблему

#javascript #node.js #mongodb #mongoose #ejs

#javascript #node.js #mongodb #мангуст #ejs

Вопрос:

Пытаюсь создать веб-сайт блога, где пользователи могут комментировать сообщения. Я смог создавать разные записи в блоге, поэтому теперь я пытаюсь реализовать функцию комментариев. В моем routes/admin/comments.js файл Я смог создать массив комментариев и добавить каждый комментарий в массив. Я использую EJS, чтобы попытаться отобразить комментарии, которые должны быть <%=comments%>, но я получаю сообщение об ошибке «комментарии не определены», хотя я определил это в:

   Comment.find({})
    .then(comments =>{
      console.log(comments)
      res.render('home/post', {comments})
    })
}) 
  

Что я делаю не так? Я использую тот же метод, что и при создании сообщений.

models/Post.js Схема

 const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const PostSchema = new Schema({
  title:{
    type: String,
    required: true
  },
  description:{
    type: String,
    required: true
  },
  body:{
    type: String,
    required: true
  },
  comments:[{
    type: Schema.Types.ObjectId,
    ref: 'comments'
  }]
},{usePushEach:true})

module.exports = mongoose.model('posts', PostSchema);
  

models/Comment.js Схема

 const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const CommentSchema = new Schema({
  username:{
    type: String,
    required: true,
  },
  body:{
    type: String,
    required: true
  },
})

module.exports = mongoose.model('comments', CommentSchema)
  

routes/admin/comments.js файл

 const express = require('express');
const router = express.Router();
const Post = require('../../models/Post');
const Comment = require('../../models/Comment');

router.get('/', (req,res) =>{
  Comment.find({})
    .then(comments =>{
      console.log(comments)
      res.render('home/post', {comments})
    })
})

//Finds the comments and makes it available as object
router.post('/', (req,res) =>{
  Post.findOne({_id: req.body.id})
    .then(post=>{
      console.log(post)
      const newComment = new Comment({
        username: req.body.username,
        body: req.body.body,
      });
      post.comments.push(newComment);
      post.save()
        .then(savedPost =>{
          newComment.save()
            .then(savedComment =>{
              res.redirect('/')
            })
        })
    })
})

module.exports = router;
  

Комментарии:

1. вы уверены, что у вас есть какие-то записи в вашей базе данных?

2. @EugenSunic Да. Прямо сейчас я просматриваю свой MongoDB, и там есть две коллекции: «комментарии» и «сообщения». В коллекции ‘posts’ есть массив под названием ‘comments’, и в нем есть идентификаторы объектов комментариев