ejs中的一段内容没有显示,想请教什么原因导致的,新手望见谅。
发布于 8小时前 作者 JiangInk 69 次浏览 来自 问答
  <%- 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集合就会失败了,它应该会返回错误信息啊,但为什么还正常运行了,一条错误信息都没报? 求懂的大神指点一二!!!!!!!!

mongodb 在建表设置建数据库的时候都是可以随用随建的…没找到表当然不报错。mongodb 的特性决定的。

回到顶部