我有一个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]);
这抛出下面的错误
- 连接到数据库时出错错误:尝试****连接时超时,出现错误**
请说明为什么会出现此错误&我如何才能摆脱它?
谢谢!
1条答案
按热度按时间j9per5c41#
发生这种情况是因为您试图为每个查询分别连接到DB。尝试创建一个连接并将其用于所有查询!