如何在 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()