无法使用npm-postgres发布postgres客户端

问题描述 投票:2回答:2

这是我试过的代码.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();
          }
        });
node.js postgresql node-postgres
2个回答
0
投票

您的代码混合了编程风格。当您想要将API与Promises一起使用时,使用client.release()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
投票

//这对我有用

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();
            }
          });
© www.soinside.com 2019 - 2024. All rights reserved.