使用ejs快速传递路径值以查看

时间:2016-09-04 04:05:00

标签: express ejs

这是我的邮寄路线:

// 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 %>

所以我真的不确定为什么帖子会起作用。

2 个答案:

答案 0 :(得分:0)

正如我在评论中所述:问题是传递给posts的{​​{1}}的值未定义。 res.render将不会返回,并且值在任何情况下都不会返回。您需要postsCollection.find()也接受回调(或使用承诺等)。

这是所需行为的一个非常基本的实现。

retrievePost

答案 1 :(得分:-1)

它将是:

locals.posts.length()

而不是

posts.length