这是我尝试过的代码。client.release()或client.end()是 给我 UnhandledPromiseRejectionWarning 。我想发布 将连接返回到池,或在插入数据后终止连接。
client.query(format(query, values), (err, res) => {
if (err) {
console.error(err, res);
client.release();
} else {
console.log('POSTGRES DATA INSERTED SUCCESSFULLY');
// client.end();
client.release();
}
});
答案 0 :(得分:0)
您的代码混合了编程样式。 client.release()
是要与Promises一起使用API的方式,client.query(query, callback)
是要与回调API一起使用的方式。混合使用这不是一个好主意。
如果要使用回调样式,则也应该使用callback style with pool.connect
并调用传递给回调的release
参数:
pool.connect((err, client, release) => {
// if err, report it.
client.query('SELECT NOW()', (err, result) => {
// if err, report it.
// do stuff, and then release the client
release() // <--- call the 3rd argument passed to your callback
})
})
如果您想使用Promise API,则应该这样重写代码:
const client = await pool.connect();
let res;
try {
res = await client.query("some query");
}
finally {
await client.release();
}
// do something with res
重要的是该代码可以处理client.release()
产生的承诺,因此,如果失败,您将不会得到UnhandledPromiseRejectionWarning
。 Node会将错误转储到控制台并提供堆栈跟踪。
答案 1 :(得分:-1)
//这对我有用
const connectionString = 'postgresql://postgres:postgres@localhost:5432/tpa';
const pool = new Pool({
connectionString,
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 10000
});
pool.connect((err, client, release) => {
if (err) {
return console.error('Error acquiring client', err.stack);
}
client.query(format(query, values), (err, res) => {
if (err) {
console.error(err, res);
release();
} else {
console.log('POSTGRES QUERY EXECUTED SUCCESSFULLY');
release();
}
});