3

我现在正在学习 Node.js 并创建一个 Web 应用程序,但不知道如何在同一个.ejs文件上渲染两次。

所以在以下.ejs文件中:

<table>
<% rows.forEach(function(ind){ %>
/* map each value of each field to table */
<% }) %>
</table>

<table>
<% rows2.forEach(function(ind){ %>
/* map each value of each field to table */
<% }) %>
</table>

我想执行两个单独的查询并将它们呈现到同一个.ejs文件,但是当我尝试时,我不能,因为当我尝试运行第一个查询并将它呈现到上面的.ejs文件时,我没有第二个查询的结果,它为第二个表(即row2数据)吐出值。我该如何处理?还是我必须制作两个单独.ejs的文件并以嵌套形式进行两次渲染?我喜欢尽可能避免嵌套文件,所以如果有任何解决方案,请告诉我......

谢谢。

4

1 回答 1

6

等到两个查询都完成后再渲染结果:)

从概念上讲:

db.query(QUERY1, function(err, result1) {
  db.query(QUERY2, function(err, result2) {
    res.render('template', { rows : result1, rows2: result2 });
  });
});

您可以查看async.parallel,而不是像这样嵌套函数,这将使上面的代码看起来像这样:

async.parallel([
  function(callback) { db.query(QUERY1, callback) },
  function(callback) { db.query(QUERY2, callback) }
], function(err, results) {
  res.render('template', { rows : results[0], rows2 : results[1] });
});

使用的优点async.parallel是两个查询将彼此并行运行,而不是像第一个示例中那样按顺序运行。所以响应会(可能)更快。

于 2013-06-14T06:17:53.873 回答