【问题标题】:Render multiple queries in Node Express在 Node Express 中呈现多个查询
【发布时间】:2019-02-14 03:26:35
【问题描述】:

我正在使用 Node.js (express) 和 MySQL,但在尝试在同一路径中进行多个查询时遇到了问题。它抛出的错误是:

发送后无法设置标头。

我的代码是这样的:

router.post('/test', function (req, res, next){
db.query("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where 
TABLE_NAME = 'registros';", function (error, results, fields) {

if (error) throw error;
res.render('test', {
columnNames: results
});});
db.query("SELECT * FROM registros", function (error, resp, fields) {

if (error) throw error;
res.render('test', {
dataRegistros: resp
});});

});

我知道这可能是因为它在同一条路线上渲染了两次。进行多个 SQL 查询并将它们返回到视图中的文件的正确方法是什么?

问候!

【问题讨论】:

    标签: mysql node.js express


    【解决方案1】:

    根据mysql nodejs driver,您可以设置它来组合查询并返回一个带有结果的数组

    您必须在创建连接时设置此项:

    mysql.createConnection({multipleStatements: true});
    

    然后用两个查询发出请求

    router.post('/test', function (req, res, next) {
    
      var queries = [
        "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'registros'",
        "SELECT * FROM registros"
      ];
    
      db.query(queries.join(';'), function (error, results, fields) {
    
        if (error) throw error;
    
        res.render('test', {
          columnNames: results[0], // First query from array
          dataRegistros: resp      // Second query from array
        });
    
      });
    
    });
    

    但是让我问一个问题,当实际查询所有行并可以从那里获取列时,为什么需要查询列名?

    【讨论】:

    • 嗨。我这样做的原因是……只是为了实验!我问自己,如果我需要从一条路线进行多个查询并发送它们,会发生什么。我想通过首先获取列名然后获取表主体的整个记录​​来填充 html 表。谢谢,我会试试你的建议!
    【解决方案2】:

    要从单个路由进行多个查询,请使用 async npm 库

    npm install --save async
    

    然后使用并行方法和函数通过回调对数据库进行多次查询。

    async.parallel({
       one: function(callback) {
          callback(null, 'abc\n');
       },
       two: function(callback) {
         callback(null, 'xyz\n');
       }
    }, function(err, results) {
        if (error) throw error;
          res.render('test', {
            columnNames: results.one, 
            dataRegistros: results.two      
         });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多