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

Posted

技术标签:

【中文标题】如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?【英文标题】:How to render multiple result from MySQL query on the same .ejs file on Node.js and Express? 【发布时间】:2013-06-10 15:24:46 【问题描述】:

我现在正在学习 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 文件中,但是当我尝试这样做时,我无法从尝试运行第一个查询并将其呈现到上面的@ 987654325@ 文件 我没有第二个查询的结果,它为第二个表吐出值(即row2 数据)。我该如何处理?还是我必须制作两个单独的.ejs 文件并以嵌套形式渲染两次?我喜欢尽可能避免嵌套文件,所以如果有任何解决方案请告诉我...

谢谢。

【问题讨论】:

【参考方案1】:

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

概念上:

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

【讨论】:

我现在正在阅读async.parallel 上的文档,但这听起来很合适。谢谢。 我没有深入阅读文档,但是当我尝试时,参数变量results返回列表的列表,列表由行和字段组成。所以我将rows: result[0] 更改为rows: result[0][0] 并得到了我的预期。 @user2360798 啊对了,我忘了node-mysql 用两个参数而不是一个参数调用回调:)

以上是关于如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?

如何在 node.js 服务器上的 PHP Web 服务器和 Socket.io 之间创建握手?

多个域上的 Node.js 使用 express.vhosts()

如何评价 Node.js 的koa框架

node.js 与 express 如何从 url 中删除查询字符串

如何使用 express 框架通过 node.js 获取远程客户端的本地 IP 地址?