使用node-mysql和mysql-queue将多个查询结果发送到res.render()

我[新到node.js和一般编程]有两个mysql查询结果(成员信息和成员可以参加的研讨会列表),并需要将它们发送到res.render() .jade模板(会员编辑页)。

为此,我使用node-mysqlmysql-queue模块。 问题是我不知道如何传递callback函数来呈现queue.execute()完成之前的响应,所以我做了解决方法,并把前两个查询在队列(MySQL的队列function),执行队列,然后添加第三具有呈现模板的callback函数的“ 虚拟查询 ”。

我的问题是我可以使用这种解决方法,什么是正确的方式来使用这个模块?

 exports.memberEdit = function (req, res) { var q = connection.createQueue(); var membersResults, htmlDateSigned, htmlBirthDate, servicesResults; q.query("SELECT * FROM members WHERE id= ?;", req.id, function (err, results) { console.log("Članovi: " + results[0]); membersResults = results[0]; htmlDateSigned = dater.convertDate(results[0].dateSigned); htmlBirthDate = dater.convertDate(results[0].birthDate); }); q.query("SELECT * FROM services", function (err, results) { console.log("Services: " + results); servicesResults = results; }); q.execute(); // dummy query that processes response after all queries and callback execute // before execute() statement q.query("SELECT 1", function (err,result) { res.render('memberEdit', { title: 'Edit member', query:membersResults, dateSigned:htmlDateSigned, birthDate:htmlBirthDate, services:servicesResults }); }) }; 

我认为一个替代可能是使用事务来包装您的查询:

 var trans = connection.startTransaction(); trans.query(...); trans.query(...); trans.commit(function(err, info) { // here, the queries are done res.render(...); }); 

commit()将调用execute() 并提供一个callback函数,当所有查询callback完成时,这个callback函数将被调用。

尽pipe如此,这仍然是一个解决方法,如果execute()会提供传递callback的选项(但它不会),那将会更有意义。 或者,您可以使用提供Promise实现的模块,但这仍然是一个解决方法。