如何使用MongoDB和Node.js将一个模式传递到另一个模式

时间:2019-06-09 23:00:48

标签: node.js mongodb mongoose mongoose-schema

我正尝试在博客文章中发布评论,并将这些评论作为每个帖子的数组。

我设法将评论发布,但是我无法从帖子中调用信息。注释模型中包含文本和作者,但注释仅包含模型的作者部分。当评论显示在帖子上时,它们仅显示撰写评论的用户名。我已经检查了数据库,并且comment.text根本没有通过。

评论创建路线

router.post("/", ensureAuthenticated, (req, res) => {
    Blog.findById(req.params.id, (err, blog) => {
    if(err){
        console.log(err);
        res.redirect("/blog");
    } else {
        Comment.create(req.body.comment, (err, comment) => {
        if(err){
            req.flash("error", "Something went wrong");
            console.log(err);
        } else {
            //add username and id to comment
            comment.author.id = req.user._id;
            comment.author.name = req.user.name;
            comment.author.email = req.user.email;
            comment.save();
            //save comment
            blog.comments.push(comment);
            blog.save();
            req.flash("success", "Successfully added comment");
                    res.redirect("/blog/" + blog._id);
            }
        });
    }
    });
});

评论模式

const mongoose = require("mongoose");
var commentSchema = new mongoose.Schema({
    text: String,
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        name: String,
        email: String
        }
});
module.exports = mongoose.model("Comment", commentSchema);

显示评论的部分显示页面

<div class="card-body">
<% blog.comments.forEach(function(comment){ %>
    <div class="row">
        <div class="col-md-12">
        <strong><%= comment.author.name %></strong>
        <span class="float-right">10 days ago</span>
            <p class="card-text">
                <%= comment.text %>
                </p>
        <% if(user && comment.author.id.equals(user._id)) { %>
        <a class="btn btn-warning btn-sm d-inline-block" href="/blog/<%= blog._id %>/comments/<%= comment._id%>/edit">Edit</a>
        <form class="d-inline-block" action="/blog/<%= blog._id %>/comments/<%= comment._id%>?_method=DELETE" method="POST">
        <button class="btn btn-danger btn-sm">Delete</button>
        </form>
<% } %>
<hr>
    </div>
    </div>
<% }) %>
</div>

我希望显示页面显示每个评论的文本。

1 个答案:

答案 0 :(得分:0)

我缺少bodyParser。万一其他人遇到此问题,https://stackoverflow.com/a/55793723/8145657会为我修复。