Promise.all()连接到数据库时抛出错误错误:与Node-Postgres一起使用时超时

wkftcu5l  于 2023-01-30  发布在  Node.js
关注(0)|答案(1)|浏览(123)

我有一个Node.js Express应用程序,将Postgres作为数据库。我使用pg从应用程序进行数据库通信。
这是我的db.service的样子

import { Pool } from 'pg';

const dbConfig = {/*my valid db configuration*/};

const pool = new Pool(dbConfig);

export const connectDB = async () => {
 let client;
 try {
  client = await pool.connect();
 } catch (error) {
  console.error('error while connecting to database', error);
  process.exit(1);
 }
 return client;
};

我有以下两个疑问

1.

export const fetchUser = async (email) => {
const client = await connectDB();

  const query = `
    SELECT full_name FROM app.users
    WHERE  email = '${email}'
  `;

  let result;
  try {
    result = await client.query(query);
    if (result.rowCount) {
      return result.rows[0].full_name;
    }
  } catch (error) {
  } finally {
    await client.release();
  }
  return result;
};

2

export const fetchWallet = async (email) => {
    const client = await connectDB();
    
      const query = `
        SELECT wallet_money FROM app.user_wallet
        WHERE  email = '${email}'
      `;
    
      let result;
      try {
        result = await client.query(query);
        if (result.rowCount) {
          return result.rows[0].wallet_money;
        }
      } catch (error) {
      } finally {
        await client.release();
      }
      return result;
    };

现在从我的一个controller.js中,如果我单独调用这些函数wait,没有问题
ctrl.js

const fullName = await fetchUser('some@gmail.com');
   const walletMoney = await fetchWallet('some@gmail.com');

这样就没有问题了,但是如果我把它们合并成一个承诺

const $0= fetchUser('some@gmail.com');
   const $1= fetchWallet('some@gmail.com');
  
   const result = await Promise.all([$0, $1]);

这抛出下面的错误

    • 连接到数据库时出错错误:尝试****连接时超时,出现错误**

请说明为什么会出现此错误&我如何才能摆脱它?
谢谢!

j9per5c4

j9per5c41#

发生这种情况是因为您试图为每个查询分别连接到DB。尝试创建一个连接并将其用于所有查询!

相关问题