【问题标题】:In node pg client.query doesn't return在节点 pg client.query 中不返回
【发布时间】:2018-06-22 04:12:55
【问题描述】:

我目前正在更新一个非常旧的应用程序以在 Heroku 上运行。我必须更新到最新版本的 pg 以支持 heroku 上最新的 postgres。然而,这最初是抽象出来的,所以它都在一个文件中处理(如下)。我可以成功连接到数据库,但client.query 永远不会返回。

第一个console.logSELECT * FROM public.user WHERE "email" = $1 [ 'xx@xx.com' ]。但是,我从未达到第二个console.log。我没有收到任何连接错误。

我正在使用 pg 7.x 和 postgres 10。

有什么想法吗?

const { Client } = require('pg');
const config = require('.././app/models/config.js');
const client = new Client({
	connectionString: process.env.DATABASE_URL || config.database || ''
});

var conString = config.database || '';

client.connect();

module.exports = {
	query: function(text, values, cb) {
		console.log(text, values);
		client.query(text, values, function(err, result) {

			console.log(err, result);

			if (err) {
				console.log(err);
			}
			if (cb) {
				cb(err, result);
			}
			client.end();
		});
	}
};

【问题讨论】:

  • 你有没有弄清楚问题出在哪里?我使用的是 Promise 而不是回调,但看到了同样的问题 - Promise 永远不会得到解决,所以 await client.query() 的行为就像函数永远不会返回一样。
  • 嘿@Malvineous,这里也一样,虽然这取决于我运行相同代码的服务器。你找到解决办法了吗?
  • @StéphanedeLuca 我有一段时间没有遇到这个问题,但我认为许多pg 版本与最近的 NodeJS 版本存在这样的不兼容性。现在,每当我遇到这样的奇怪问题时,我都会更新 pg 模块并且它会消失(或者我确保我正在运行一个落后于最新 NodeJS 版本的模块,如果 pg 模块尚未更新新的 NodeJS 版本)。
  • 我也有同样的问题。

标签: node.js postgresql heroku


【解决方案1】:

编辑:我已经使用 pg 的正确承诺进行了编辑。由于 Nodejs 的异步特性,您必须使用承诺,例如:

module.exports = {
  query: function(text, values) {
    console.log(text, values);
    return new Promise(function (resolve, reject) {
        client.query(text, values)
         .then(function (res) { resolve(res.rows[0]) })
         .catch(function (e) { reject(e.stack) };
        });
  }
};

然后要求你模块并使用承诺:

var myPrevModule = require('module');

myPrevModule.query.then(function(resp){ 
 // Consume the callback here ...
}).catch(function(err){ 
   console.error(err); 
})

【讨论】:

  • 感谢您的回复,但我使用的是回调参数cb 而不是使用承诺。这是非常古老的代码,我不想更新我的所有模型以使用 Promise。 node-pg 库确实支持回调参数 node-postgres.com/features/queries
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2021-08-09
  • 2018-02-22
相关资源
最近更新 更多