这是我的邮寄路线:
// CRUD posts.
app.post('/crud', function(req, res) {
db.users.addPost(req.body);
res.redirect('crud')
});
这是我的路线:
app.get('/crud', function(req, res) {
res.render('crud', {
user: req.user,
posts: db.users.retrievePost()
});
});
这是我用来从我的数据库中检索帖子的函数:
// Retrieve posts from database to pass to view.
exports.retrievePost = function() {
var cursor = postsCollection.find().toArray(function(err, record) {
console.log(record);
return record;
});
}
当我记录记录时,它返回以下数据:
[
{ _id: 57cb835ba8b8250bdcd65e5d, userCreate: 'This is a question' },
{ _id: 57cb85709435720c055b10e6, userCreate: 'hello' },
{ _id: 57cb87b10dc3ec0c3a78f970, userCreate: 'hello' },
{ _id: 57cb87c20dc3ec0c3a78f971, userCreate: 'what up here' }
]
这就是我使用ejs在我的' crud'中显示userCreate值的方法。图。
<ul class="posts">
<% for(var i=0; i<posts.length; i++) { %>
<li class="post">
<span><%= posts[i].userCreate %></span>
</li>
<% } %>
</ul>
错误是: 无法读取属性&#39;长度&#39;未定义的。
为什么帖子未定义?在我渲染视图的get路径中,我将retrievePost()的值赋给了帖子。然后我调用了该视图中的帖子。我们可以假设该函数被正确导出,因为我在相同的路径文件中使用同一文件中的其他函数。这有什么不对?
我想在这篇文章中添加我测试传递的事实
title : "testing"
并能够以下列方式呈现它:
<%= title %>
所以我真的不确定为什么帖子会起作用。
答案 0 :(得分:0)
正如我在评论中所述:问题是传递给posts
的{{1}}的值未定义。 res.render
将不会返回,并且值在任何情况下都不会返回。您需要postsCollection.find()
也接受回调(或使用承诺等)。
这是所需行为的一个非常基本的实现。
retrievePost
答案 1 :(得分:-1)
它将是:
locals.posts.length()
而不是
posts.length