大家好,我在最近几天使用nodejs开发了一个简单的应用程序,并创建了这个函数来从mongodb 返回客户端实例
const mongodb = require("mongodb");
const { db } = require("../config/env");
const conection = async () => {
try {
const client = await mongodb.MongoClient.connect(db.uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
return client;
} catch (error) {
throw error;
}
};
module.exports = conection;
我为acess数据层制作了这个简单的函数,并在中返回记录
const index = async ({ limit = 10, offset = 0, filter = {} }) => {
const client = await conection();
if (filter._id) {
filter._id = mongodb.ObjectID(filter._id);
}
try {
const collection = client.db("api").collection("user");
const data = await collection
.find({ ...filter })
.skip(offset)
.limit(limit)
.toArray();
return data;
} catch (error) {
throw new Error(error);
} finally {
await client.close();
}
};
我想知道我是否真的需要建立连接并用每个查询关闭它,或者我应该保持连接打开
注意:在这种情况下,我使用的是一个简单的Atlas集群(免费(,但我想知道在使用postgres 等sql库时是否也应该这样做
除非退出应用程序,否则不要关闭连接,然后确保关闭。确保在返回执行更多I/O时使用相同的连接。数据库连接是资源密集型的,应尽可能少地建立并尽可能多地共享。如果您不选择现有的连接,并且出现连接池耗尽等奇怪错误,那么ODBC等连接也可能会出现中间件问题。了解您的连接器以及如何最有效地使用它,这将是一项有益的活动:-(
您可以使用mongoose模块来管理MongoDB。
-
安装
npm install mongoose
-
使用
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true });
我相信Mongoose可以帮助您解决问题。
这样做是一种很好的做法。这样,在每次操作(插入etc(之后,您都会关闭连接,在每次执行操作(插入etc(之前,您会重新打开连接。