我目前正在更新一个非常老的应用程序,以便在Heroku上运行。我必须更新到最新版本的pg才能支持heroku上的最新postgres。但是,这最初是抽象出来的,因此全部在一个文件中处理(如下)。我可以成功连接到数据库,但是client.query
永不返回。
第一个console.log
是SELECT * 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();
});
}
};
答案 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);
})