javascript - 如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?

标签 javascript html node.js express ejs

我现在正在学习 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 文件并以嵌套形式渲染两次?我喜欢尽可能避免嵌套文件,所以如果有任何解决方案请告诉我...

谢谢。

最佳答案

在呈现结果之前等待两个查询都完成 :)

概念上:

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 的优点是两个查询将彼此并行运行,而不是像第一个示例中那样按顺序运行。因此响应会(可能)更快。

关于javascript - 如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100682/

相关文章:

在 PHP echo 上显示 Javascript 提示

css - Div导航栏背景颜色不显示

javascript - 使用 Gulp-Notify 在终端中显示项目文件夹路径,而不是硬盘上项目的整个路径

javascript - 在nodejs中使用async和await获取Promise { <pending> }

javascript - Chrome 中的最小视口(viewport)宽度

javascript - 根据选定的单选按钮更改选项值

javascript - 使用 Squire.js 注入(inject)依赖项时未执行 Jasmine 规范

javascript - DBSign 如何在仅浏览器解决方案中使用智能卡证书进行签名?

html - 向输入元素添加值会导致它垂直移动

javascript - Node.js sftp putfile 未创建目录