gpt4 book ai didi

javascript - Serverless express 关闭 mongodb 连接

转载 作者:行者123 更新时间:2023-12-05 00:29:21 30 4
gpt4 key购买 nike

我在 aws 上使用无服务器,使用 nodejs 和 mongodb atlas 作为数据库
目前我正在使用最多允许 500 个连接的试用版。
似乎我的代码在进程结束时没有断开数据库
我正在使用 express 来管理它
首先,我没有关闭连接,认为一旦进程结束,连接就会自动关闭,但我打开了很多连接。
然后我添加了一个中间件来在响应发送后关闭我的连接,它不工作,我认为无服务器在发送响应后停止进程。
例如,不是在我关闭 mongo 连接的每条路线上

router.get('/website/:id/page', async (req, res, next) => {
try {
const pages = await pageDataProvider.findByWebsite(req.params.id);
await mongodbDataProvider.close();
res.json(pages);
} catch (error) {
next(error)
}
})
这就是我处理与 mongo 的连接的方式
const MongoClient = require('mongodb').MongoClient
const config = require('../config')

const MONGODB_URI = config.stage === 'test' ?
global.__MONGO_URI__ :
`mongodb+srv://${config.mongodb.username}:${config.mongodb.password}@${config.mongodb.host}/admin?retryWrites=true&w=majority`;
const client = new MongoClient(MONGODB_URI);

let cachedDb = null;

module.exports.connect = async () => {

if (cachedDb) return cachedDb;

await client.connect();

const dbName = config.stage === 'test' ? global.__MONGO_DB_NAME__ : config.stage;
const db = client.db(dbName)
cachedDb = db;

return db;
}

module.exports.close = async () => {
if (!cachedDb) return;

await client.close();
cachedDb = null;
}
我不明白为什么我打开了这么多连接

最佳答案

步骤1
隔离对 MongoClient.connect() 的调用函数到它自己的模块中,以便可以跨函数重用连接。让我们创建一个文件mongo-client.js为了那个原因:
mongo-client.js :

const { MongoClient } = require('mongodb');

// Export a module-scoped MongoClient promise. By doing this in a separate
// module, the client can be shared across functions.
const client = new MongoClient(process.env.MONGODB_URI);

module.exports = client.connect();
第2步
导入新模块并在函数处理程序中使用它来连接数据库。
一些文件.js :
const clientPromise = require('./mongodb-client');

// Handler
module.exports.handler = async function(event, context) {
// Get the MongoClient by calling await on the connection promise. Because
// this is a promise, it will only resolve once.
const client = await clientPromise;

// Use the connection to return the name of the connected database for example.
return client.db().databaseName;
}

关于javascript - Serverless express 关闭 mongodb 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70183008/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com