我正在尝试在我的节点应用程序中使用连接池,但是它没有像预期的那样工作。下面是我的代码:
import dotenv from 'dotenv';
import MongoClient from 'mongodb';
dotenv.config();
let db;
export async function getDb() {
if (db) {
console.log('reusing db connection');
return db;
}
try {
const conn = await MongoClient.connect(process.env.DEV_URI,
{ useUnifiedTopology: true,
maxPoolSize: 5 });
console.log('db connection created');
db = conn.db('dev');
} catch (err) {
console.log(err);
}
return db;
}
这是
import { getDb } from './db.js';
async function foo() {
const db = await getDb();
}
async function bar() {
const db = await getDb();
}
// This outputs 8 lines of 'db connection created'
foo(); bar();
foo(); bar();
foo(); bar();
foo(); bar();
所以运行app.js时,我预计最多只会创建5个连接,但是每个foo()和bar()都会创建一个新的集合。如何使每个异步操作都能在池中挑选一个空闲连接?
我认为你做得太快了:)所有的异步函数都是一次执行的,所以当每一个启动时,都没有连接。
尝试在调用
另一种解决方案是在