简体   繁体   中英

How to pass one Schema into another using MongoDB & Node.js

I am attempting to post comments to a blog post and have these comments as an array for each post.

I have managed to get the comments to post, but I cannot call the information from the post. The comment model has text and author in it but the comment only takes the author part of the model. When the comments show up on the post, they only show the name of the user that has written the comment. I have checked the database and comment.text isn't getting passed through at all.

Comments Create Route

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);
            }
        });
    }
    });
});

Comment Schema

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);

Part of the Show Page Which Shows The Comment

<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>

I am expecting the show page to show the text of each comment.

I was missing bodyParser. In case anyone else has this problem, https://stackoverflow.com/a/55793723/8145657 fixed it for me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM