在 Next.js 上使用“mongodb”库中的 MongoClient 进行开发
似乎每次我重新加载页面(甚至在保存时热重新加载)都会创建一个与 mongodb 的新活动连接。
我正在缓存一个cachedClient,因此当同一运行中发生很少的请求时,它会使用相同的连接,但似乎每次重新启动/异常都会创建一个新的活动调用,并且默认情况下不会删除以前的调用(在近期)。
管理 mongodb 活动客户端连接的最佳实践是什么?
mongodb.ts
export async function connectToDatabase(): Promise<{
client: MongoClient;
db: Db;
}> {
if (cachedClient && cachedDb) {
return {
client: cachedClient,
db: cachedDb,
};
}
const client = new MongoClient(MONGODB_URI);
await client.connect();
const db = client.db(MONGODB_DB);
cachedClient = client;
cachedDb = db;
return {
client: cachedClient,
db: cachedDb,
};
}
我建议您将
cachedClient
和 cachedDb
存储在 全局对象 中以用于开发目的。它会在热重载时保护您的客户端。您还可以参考官方 NextJS 示例,他们已经涵盖了这个特定案例:https://github.com/vercel/next.js/blob/canary/examples/with-mongodb/lib/mongodb.ts
此外,如果您想为 MongoDB 连接指定超时,您可以传递此处指定的参数:https://www.mongodb.com/docs/manual/reference/connection-string/#timeout-options