<%- include header %>
<% posts.forEach(function(post, index) { %>
<p><h2><a href="#"><%= post.title %></a></h2></p>
<p class="info">
作者:<a href="#"><%= post.name %></a> |
日期:<%= post.time.minute %>
</p>
<p><%- post.post %></p>
<% }) %>
<%- include footer %>
今天想试试用node写个简易博客,已经做到能够使用mongodb存储博文内容了,但是主页显示时,没有看到博文内容, 如上为主页index.ejs文件代码,发现 forEach() 那段js代码没执行,但是posts中是有内容的,不知道是什么原因?
如下是路由index.js中,关于主页的内容:
/* GET home page. */
router.get('/', function(req, res) {
Post.get(null, function(err, posts) {
if (err) {
posts = [];
}
res.render('index', {
title: '主頁',
user: req.session.user,
posts: posts,
success: req.flash('success').toString(),
error: req.flash('error').toString()
});
});
});
2 回复
找到問題原因了,妈蛋! 呃……再次打印发现 posts 这个变量中确实没有数据,晃了一眼发现在models/post.js中, Post.save()这个实现在读取posts集合(db.collection)的时候,把表名误写成“post”了, 而在Post.get()这个实现中却又用“posts”去读取集合,所以始终都没有读到数据,因为数据库本身没有这张表, 但我很纳闷啊,Post.get()实现中,读取集合的代码我是这样写的:
//read posts collection
db.collection('posts', function(err, collection) {
if (err) {
mongodb.close();
return callback(err);
}
var query = {};
if (name) {
query.name = name;
}
//find posts
collection.find(query).sort({time: -1}).toArray(function(err, docs) {
mongodb.close();
if (err) {
return callback(err);
}
callback(null, docs);
});
});
代码中对err都进行处理了,如果它没找到表,那应该读取posts集合就会失败了,它应该会返回错误信息啊,但为什么还正常运行了,一条错误信息都没报? 求懂的大神指点一二!!!!!!!!