在nodejs中获取postgres-query的结果作为variables

我知道下面的代码在命令行中输出我的查询结果:

query.on("row", function (row, result) { result.addRow(row); }); query.on("end", function (result, callback) { println(JSON.stringify(result)) }); 

不过,我想在下面的代码中使用结果值作为variables,而不仅仅是打印到命令行。

更新:能够使用下一个查询的值是不够的,我希望它在查询范围之外:

 query.on("row", function (row, result) { result.addRow(row); }); query.on("end", function (result, callback) { println(JSON.stringify(result)) }); //use the result here 

预先感谢您的答案。

你有2个选项:

  • 如果要继续使用基本驱动程序,则必须使用结果callback,然后嵌套这些以便在下一个查询中使用结果:

     connection.query(query1, values1, function(err1, result1) { // check if(err1) first, then: connection.query(query2, values2, function(err2, result2) { // check if(err2) first, then: connection.query(query3, values3, function(err3, result3) { // check if(err3) first, then: cb(result1, result2, result3); }); }); }); 
  • 另一种方法是使用promise( pg-promise ),当你可以像这样连接呼叫时:

     db.query(query1, values2) .then(data => { return db.query(query2, values2); }) .then(data => { return db.query(query3, values3); }) .catch(error => {}); 

虽然在这种情况下pg-promise的正确方法是通过方法task

 db.task(t => { const result = {}; return t.query(query1, values1) .then(data => { result.a = data; return t.query(query2, values2); }) .then(data => { result.b = data; return t.query(query3, values3); }); .then(data => { result.c = data; return result; }); }) .than(data => { // data = {a, b, c} }) .catch(error => {}); 

第二种方法自动为您提供在一次执行多个查询时访问ES6和ES7的现代语法,如下所示:

对于ES6:

 db.task(function * (t) { let a = yield t.query(query1, values1); let b = yield t.query(query2, values2); let c = yield t.query(query3, values3); return {a, b, c}; }) .than(data => { // data = {a, b, c} }) .catch(error => {}); 

对于ES7 / Babel:

 db.task(async t => { let a = await t.query(query1, values1); let b = await t.query(query2, values2); let c = await t.query(query3, values3); return {a, b, c}; }) .than(data => { // data = {a, b, c} }) .catch(error => {});