首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用全局参数重用mongo客户端,最佳实践

如何使用全局参数重用mongo客户端,最佳实践
EN

Stack Overflow用户
提问于 2020-06-05 03:51:18
回答 1查看 195关注 0票数 1

因此,我在StackOverflow中阅读了其他主题,这些主题试图触及这一点,但没有明确的解决方案。

首先,我为mongo客户端创建了一个配置文件,该文件从mongo客户端导出。

代码语言:javascript
复制
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,所有的节点配置都在这里。

代码语言:javascript
复制
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}...`));
});

现在,为了让我在任何需要查询的地方重用这个数据库,最好的实践是什么?我如何才能全局添加它?全局添加它会影响性能还是不好的做法?

我见过其他的例子,人们使用一个类执行这两个任务,但都在同一个文件中,而不是使用导出或全局。

最后一个问题,我应该在哪里以及为什么要关闭数据库客户端连接。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-05 04:54:34

我认为将db connection对象添加到global对象可以很好地工作。如果您担心性能,只需将全局变量重新分配给本地变量即可。//dbconnection.js

代码语言:javascript
复制
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

代码语言:javascript
复制
require("./dbconnection")();
const userDB = global.db.collection("Users");
userDB.find({}).toArray((err, items)=>{});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62203018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档