在节点pg client.query不返回

时间:2018-06-21 12:16:41

标签: node.js postgresql heroku

我目前正在更新一个非常老的应用程序,以便在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();
		});
	}
};

1 个答案:

答案 0 :(得分: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); 
})