1

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

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

我的问题是我可以使用此解决方法吗?使用此模块的正确方法是什么?

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 }); 
})
};
4

1 回答 1

1

我认为另一种方法是使用事务来包装您的查询:

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

commit()将调用它execute() 提供一个回调,当所有查询回调完成时将调用该回调。

不过,这仍然是一种解决方法,如果execute()提供传递回调的选项会更有意义(但它没有)。或者,您可以使用提供 Promise 实现的模块,但这仍然是一种解决方法。

于 2013-04-28T14:26:22.217 回答