在node express中呈现多个查询

kcrjzv8t  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(391)

我正在使用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查询并将它们返回到视图中的文件中的正确方法是什么?
当做!

eoigrqb6

eoigrqb61#

要从单个路由进行多个查询,请使用异步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      
     });
});
jfgube3f

jfgube3f2#

根据mysql nodejs驱动程序,您可以将其设置为组合查询并返回带有结果的数组
创建连接时必须设置:

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

  });

});

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

相关问题