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 后构建您的用户字典 并仅获取您需要的用户。
我对当地人有意见。在 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 后构建您的用户字典 并仅获取您需要的用户。