【问题标题】:Sending multiple query results to res.render() using node-mysql and mysql-queue使用 node-mysql 和 mysql-queue 将多个查询结果发送到 res.render()
【发布时间】:2013-04-28 13:33:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js node-mysql


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 2020-06-20
      • 2015-02-07
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      相关资源
      最近更新 更多