我正在使用Node和Mongoose,我真的很新。
比方说,我有以下名为userposts,route和index.ejs文件的集合。
我想在页面authors / john上显示所有John的帖子(作者为John),在页面authors / mary上显示所有Mary的帖子(作者为Mary)。
例如,当前的页面authors / mary显示集合中的所有帖子。有人可以帮我吗?
收藏:
{
"_id" : 1,
"title" : "title1",
"description" : "description1",
"author": "John",
"link": "john"
}
{
"_id" : 2,
"title" : "title2",
"description" : "description2",
"author": "John",
"link": "john"
}
{
"_id" : 3,
"title" : "title3",
"description" : "description3",
"author": "Mary",
"link": "mary"
}
{
"_id" : 4,
"title" : "title4",
"description" : "description4",
"author": "Mary",
"link": "mary"
}
路线:
router.get("/authors/:link", function(req, res){
Userposts.find(req.params.author, function(err, allUserposts){
if(err){
console.log(err);
} else {
if(req.xhr) {
res.json(allUserposts);
} else {
res.render("userposts/index", {userposts: allUserposts});
}
}
});
});
index.ejs:
<% userposts.forEach(function(post){ %>
<article>
<h4><%= post.title %></h4>
<p><%= post.author %></p>
<p><%= post.description %></p>
</article>
<% }) %>
答案 0 :(得分:0)
在进行查询以获取特定于用户的帖子时,应提及作者姓名。
由于在您的路线中,因此您正在使用查询
BlogPostModel.find(authorName)
正确的语法应该是
BlogPostModel.find({ author: authorName })
进行MongoDB查询时,必须遵循键值syntex。
您的最终路线应该是
router.get("/authors/:link", function(req, res){
Userposts.find({ author: req.params.author }, function(err, allUserposts){
if(err){
console.log(err);
} else {
if(req.xhr) {
res.json(allUserposts);
} else {
res.render("userposts/index", {userposts: allUserposts});
}
}
});
});
有关更多信息,您可以检查documentation。
答案 1 :(得分:0)
我想您将“ Express”用作您的Node后端框架。
在Express路由器中,valueName以“:”开头表示“ req.params”中的值,因此,如果使用“:link”,则可以从“ req.params.link”中获取该值。您可以从http://expressjs.com/en/guide/routing.html获取更多详细信息。
如果要按作者查询,猫鼬查找操作的正确格式为:
Userposts.find({ author: req.params.link })
答案 2 :(得分:0)
谢谢您的回答。是的,我正在使用Express。应用解决方案后,它仍然无法按照我想要的方式工作。我最终在路由中获取了当前网址,并将if语句放入了我的ejs模板。现在可以了。所以我的最终路由和index.ejs看起来像这样:
router.get("/authors/:link", function(req, res){
var currentUrl = req.originalUrl;
Userposts.find({}, function(err, allUserposts){
if(err){
console.log(err);
} else {
if(req.xhr) {
res.json(allUserposts);
} else {
res.render("userposts/index", {userposts: allUserposts, currentUrl: currentUrl});
}
}
});
});
<% userposts.forEach(function(post){ %>
<% if(post.link === currentUrl) { %>
<article>
<h4><%= post.title %></h4>
<p><%= post.author %></p>
<p><%= post.description %></p>
</article>
<% } %>
<% }) %>