#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’, и в нем есть идентификаторы объектов комментариев