因此,我在StackOverflow中阅读了其他主题,这些主题试图触及这一点,但没有明确的解决方案。
首先,我为mongo客户端创建了一个配置文件,该文件从mongo客户端导出。
const { MongoClient } = require('mongodb');
const authMechanism = 'SCRAM-SHA-1';
const user = encodeURIComponent(process.env.MONGODB_USER);
const password = encodeURIComponent(process.env.MONGODB_PASSWORD);
const uri = `mongodb://${user}:${password}@${process.env.MONGODB_URI}?authMechanism=${authMechanism}`;
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true,
loggerLevel: 'info',
});
module.exports = client;从那时起,我明白了你必须让mongo客户端初始化一次,而且只有一次,在你监听你的应用程序之前,因此我创建了这个index.js (应用程序的入口点)文件,它需要典型的app.js,所有的节点配置都在这里。
const app = require('./app');
const db = require('../configs/db/db-config');
const port = process.env.PORT;
db.connect((err, client) => {
if (err) {
throw err;
}
const database = client.db('dbnamegoeshere');
app.listen(port, () => console.log(`Listening on port ${port}...`));
});现在,为了让我在任何需要查询的地方重用这个数据库,最好的实践是什么?我如何才能全局添加它?全局添加它会影响性能还是不好的做法?
我见过其他的例子,人们使用一个类执行这两个任务,但都在同一个文件中,而不是使用导出或全局。
最后一个问题,我应该在哪里以及为什么要关闭数据库客户端连接。
谢谢。
发布于 2020-06-05 04:54:34
我认为将db connection对象添加到global对象可以很好地工作。如果您担心性能,只需将全局变量重新分配给本地变量即可。//dbconnection.js
const debug = require('debug')('someapp:mongo');
const mongoClient = require('mongodb').MongoClient;
const mongoOptions = {};
const mongoUrl = process.env.MONGO_URL || "mongodb://localhost:27017/dbname";
function callback(err, r){
debug("callback: ", err, r);
};
module.exports = function () {
mongoClient.connect(mongoUrl, mongoOptions, (err, client) => {
if(err){
debug("MongoDB connection error: ", err);
throw err;
};
const db = global.db = client.db();
});
};只需在你的根应用程序文件中像这样使用它,一旦添加到文件中,db连接就应该在项目的其他文件中全局可用。//server.js
require("./dbconnection")();
const userDB = global.db.collection("Users");
userDB.find({}).toArray((err, items)=>{});https://stackoverflow.com/questions/62203018
复制相似问题