【问题标题】:Not able to release postgres client using npm-postgres无法使用 npm-postgres 发布 postgres 客户端
【发布时间】:2019-06-17 21:31:03
【问题描述】:

这是我尝试过的代码。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


【解决方案1】:

您的代码混合了编程风格。 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() 产生的promise,所以如果它失败了,你将不会得到UnhandledPromiseRejectionWarning。 Node 会将错误转储到控制台并提供堆栈跟踪。

【讨论】:

    【解决方案2】:

    // 这对我有用

    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();
                }
              });
    

    【讨论】:

      猜你喜欢
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      相关资源
      最近更新 更多