sails.js - 本地问题(Post 评论)

sails.js - Locals problem (Post comments)

我对当地人有意见。在 post 模型中我有评论集合,一切都很好并且没有问题获取用户和 post id 但我无法在视图中输出来自 post.postComments[i].author 的用户名和用户头像.username/avatar (请看下面的 index.js )。可能是什么问题?

PostController.js

index: function(req, res){
    Post.find({}).populate('author').populate('postComments').exec(function(err, results) {
        res.send(200, results);
    });
},

addComment: function(req, res){
    var params = req.allParams();

    Comment.create({author: params.author, content: params.content, post: params.post, postId: params.postId}, function(err, comment){
        if (err){ res.send(500, err); console.trace(err); }
        else{
            res.send(200, comment);
            res.redirect("/");
            console.log("Testt");
        }
    });
},

index.ejs

<form action="/addComment" method="POST">
<div class="row">
    <div class="col-10 col-sm-11 col-md-11">
        <input type="hidden" name="author" value="<%= req.user.id %>">
        <input type="hidden" name="postId" value="<%= post.id %>">
        <input type="text" id="postcomment" name="content" placeholder="Comment here..">
    </div>
    <div class="col-1 col-sm-1 col-md-1">
        <button type="submit"><i class="fas fa-location-arrow" style="color: #0c5460; font-size: 23px; margin-left: -10px;"></i></button>
    </div>
</div>

<% if(post.postComments.length > 0) { %> 
<% for(var i = 0; i < post.postComments.length; i++) { %>
    <div id='<%- post.postComments[i].id%>'>
        <div style="padding-top: 10px;">
            <div class="container" style="background-color: #ccc; border-radius: 20px;">
                <div class="row">
                    <div class="col-md-1" style="padding: 0;">
                        <img src='/images/profileimage/<%- post.postComments[i].author.profileimage_uid %>' style="width: 30px; height: 30px; border-radius: 80px; border: 1px solid #ccc;">
                    </div>
                    <div class="col-md-2" style="padding: 3px; margin: inherit;">
                        <a href="/profile/" style="color: #0c5460; font-weight: 700;"><%- post.postComments[i].author %></a>
                    </div>
                    <div class="col-md-7" style="padding: 4px; word-break: break-all;">
                        <p>- <%- post.postComments[i].content%></p>
                    </div>
                </div>
            </div>
        </div>
    </div>
<% } %> 
<% } %>

我正在根据您问题中的有限代码进行一些猜测,但是...

如果这是获取数据以添加到视图的行:[​​=12=]

Post.find({}).populate('author').populate('postComments')

如果 post 评论的作者是一个链接的集合,那么问题是您的作者没有填充到您的 post 评论中。您使用 Comments 填充 Post,但从未继续填充 Comments与他们的作者

如果我对您的数据存储的猜测有误,我们深表歉意。


编辑

如果您想知道如何实现您正在尝试执行的两级 "nested" 填充...sails 不会开箱即用,您必须自己编写代码。这是一种方法,从获取用户字典开始:

User.find({}).exec(function(err,users) {
    // handle any error
    var userDict = {};
    for (var i = 0; i < users.length; i++) {
        userDict[users[i].id] = users[i];
    }
    // now fetch your posts
    Post.find({}).populate('postComments').exec(function(err, posts) {
        // handle any error
        // now use your user dictionary to populate
        for (var i = 0; i < posts.length; i++) {
            var post = posts[i];
            if (post.author && userDict[post.author]) {
                post.author = userDict[post.author];
            }
            for (var j = 0; j < post.postComments.length; j++) {
                var comment = post.postComments[j];
                if (comment.author && userDict[comment.author]) {
                    comment.author = userDict[comment.author];
                }
            }
        }
        return res.send(200, posts);
    });
});

这很难看,但如果你想要这种两级人口,可能需要这样的东西。一些想法:

  • 如果您能够使用 promise 库,则可以将回调展平一些。
  • 如果您有大量用户,您可能会决定在 获取您的 post 后构建您的用户字典 并仅获取您需要的用户。