当我尝试使用版本 3.6.0 中的 mongodb Nodejs 本机驱动程序建立与数据库的单个 mongodb 连接时,遇到了一种奇怪的问题。
我的想法是在所有客户端会话中只打开一个连接,并在我的 Express 服务器中的不同路由中重用它,当我第一次点击 getDatabase 函数时,它会创建两个连接,之后其中一个连接关闭,一个处于空闲状态,但是当我使用一条路由时,第二个会再次打开(就像一个连接只是停留在那里而不执行任何操作)。
我只想在我的池中打开一个连接。
如果您看到注释的代码,我正在使用这些选项进行测试,但它们都不适合我。
Pd:当我设置套接字超时MS到 5000 毫秒,只创建一个连接,但它会自动关闭并每 5000 毫秒重新打开,这很奇怪(即使我不使用该连接,它也会自行重新打开)。
当我设置时,所有这些问题都会发生使用统一拓扑为 true (我无法将其设置为 false,因为已弃用,并且其他拓扑将在下一版本的 mdb ndjs 驱动程序中删除)
这是一张具有奇怪行为的图像 https://i.stack.imgur.com/N5DEJ.png
代码是:
import { MongoClient, Db } from 'mongodb';
import { DB_URI } from '../config/config';
// This mod works as DataBase Singleton
let db: Db;
export const getDataBase = async (id: string) => {
try {
if (db) {
console.log('ALREADY CREATED');
return db;
} else {
console.log('CREATING');
let client: MongoClient = await MongoClient.connect(`${DB_URI}DB_${id}`, {
useUnifiedTopology: true,
/* minPoolSize: 1,
maxPoolSize: 1,
socketTimeoutMS: 180000,
keepAlive: true,
maxIdleTimeMS:10000
useNewUrlParser: true,
keepAlive: true,
w: 'majority',
wtimeout: 5000,
serverSelectionTimeoutMS: 5000,
connectTimeoutMS: 8000,
appname: 'myApp',
*/
});
db = client.db();
return db;
}
} catch (error) {
console.log('DB Connection error', error);
}
};