在 NodeJs 中处理 Mongodb 全局连接的最佳方法是什么

2024-06-05

I using 节点-Mongodb-Native https://github.com/mongodb/node-mongodb-native并尝试设置全局连接变量,但我对两种可能的解决方案感到困惑。大家能帮我看看哪一款比较好吗? 1.解决方案(这很糟糕,因为每个请求都会尝试创建一个新连接。)

var express = require('express');  
var app = express();  
var MongoClient = require('mongodb').MongoClient;  
var assert = require('assert');

// Connection URL
var url = '[connectionString]]';

// start server on port 3000
app.listen(3000, '0.0.0.0', function() {  
  // print a message when the server starts listening
  console.log("server starting");
});

// Use connect method to connect to the server when the page is requested
app.get('/', function(request, response) {  
  MongoClient.connect(url, function(err, db) {
    assert.equal(null, err);
    db.listCollections({}).toArray(function(err, collections) {
        assert.equal(null, err);
        collections.forEach(function(collection) {
            console.log(collection);
        });
        db.close();
    })
    response.send('Connected - see console for a list of available collections');
  });
});
  1. 解决方案(在应用程序初始化时连接并将连接字符串分配给全局变量)。但我相信将连接字符串分配给全局变量并不是一个好主意。

    var mongodb; var url = '[连接字符串]'; MongoClient.connect(url, 函数(err, db) {
    断言.equal(null, err); mongodb=数据库; } );

我想在应用程序初始化时创建连接并在整个应用程序生命周期中使用。

你们能帮我一下吗?谢谢。


创建一个Connection单例模块来管理应用程序数据库连接。

MongoClient不提供单例连接池所以你不想调用MongoClient.connect()在您的应用程序中重复。包装 mongo 客户端的单例类适用于我见过的大多数应用程序。

const MongoClient = require('mongodb').MongoClient

class Connection {

    static async open() {
        if (this.db) return this.db
        this.db = await MongoClient.connect(this.url, this.options)
        return this.db
    }

}

Connection.db = null
Connection.url = 'mongodb://127.0.0.1:27017/test_db'
Connection.options = {
    bufferMaxEntries:   0,
    reconnectTries:     5000,
    useNewUrlParser:    true,
    useUnifiedTopology: true,
}

module.exports = { Connection }

无处不在的你require('./Connection'), the Connection.open()方法将可用,并且Connection.db属性(如果已初始化)。

const router = require('express').Router()
const { Connection } = require('../lib/Connection.js')

// This should go in the app/server setup, and waited for.
Connection.open()

router.get('/files', async (req, res) => {
   try {
     const files = await Connection.db.collection('files').find({})
     res.json({ files })
   }
   catch (error) {
     res.status(500).json({ error })
   }
})

module.exports = router
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 NodeJs 中处理 Mongodb 全局连接的最佳方法是什么 的相关文章

  • JS 无法查询 MySQL 数据库。错误:connection.query 不是函数

    尝试查询我的 mySQL 数据库 但我不能 因为我得到了TypeError connection query is not a function错误 有谁知道为什么吗 我不知道为什么会发生这种情况 数据库 js const fs requi
  • aws-mock-sdk s3.getObject 不起作用

    这是我的 lambda 处理程序 我在其中使用各种 AWS 服务 exports handler function event context var body event var isValidBody validate doValida
  • 护照 Facebook 注销无法使用

    我试图实现 Passport Facebook 我在 server js 中的代码如下所示 用户点击 Facebook 登录时使用的路由 router get auth facebook passport authenticate face
  • node-express app.get() 在 webstorm 中标记为未解决

    如果您关注 JetBrainsWebStorm 中的 Node js 入门 http blog jetbrains com webstorm 2014 01 getting started with node js in webstorm
  • 无法将环境变量传递给 docker

    我正在尝试使用环境变量运行 docker 映像 但它对我来说不起作用 无论是使用 env list 文件还是通过命令行 docker run p 49160 8080 d appname e FOO foo 来自守护程序的错误响应 OCI
  • 测试期间的 Mocha beforeEach 和 afterEach

    我一直在尝试使用摩卡测试我的测试服务器 这是我使用的以下代码 与另一篇类似帖子中找到的代码几乎相同 beforeEach function done Setup console log test before function ws on
  • 从文件中抓取随机行

    我不知道该怎么做 我应该从哪里开始 我用谷歌搜索了这个 但没有找到关于如何从文本文件中提取随机行的结果 我唯一发现的是https github com chrisinajar node rand line https github com
  • NESTJS AWS Lambda 和 Sequelize 连接池

    由于我已经给出了下面代码片段中提到的池参数 因此是否有必要在每次 lambda 调用后关闭连接 这个 aws lambda 函数应该每分钟触发一次 池参数仅足以关闭连接吗 export const databaseProviders pro
  • MongoDB:查询速度慢,即使有索引

    我有一个网页 它使用 MongoDB 来存储和检索各种测量结果 突然 在某个时候 我的网页变得如此缓慢 以至于无法使用 事实证明 我的数据库是罪魁祸首 我进行了搜索 但没有找到任何解决我的问题的方法 我很抱歉 因为我对 MongoDB 还很
  • SetCookie 标头未存储

    我目前正在制作一个 Web 应用程序 其中 API 为 Node express js 前端为 Vue js 对于身份验证 我设置了 JWT 并通过 cookie HttpOnly 发送值 SetCookie 位于 Chrome Firef
  • mongodb对话系统

    我正在实施一个verymongodb 上的简单对话系统 这个想法应该是 当我打开一个 convo 时 它应该显示发送和接收的消息 到目前为止一切正常 并且应该非常容易 通过使用像这样的伪代码这样的简单查询 from my id AND to
  • npm 不起作用,总是出现此错误 -> 错误:找不到模块 'are-we-there-yet'

    我尝试在 Mac 上使用 Yosemite 安装 grunt 节点已经安装在最新版本中 如果我在终端中输入 node v 我会得到 v0 12 5 行 那挺好的 但是当我想用 npm 安装某些东西时 我只得到一个错误 我尝试了 sudo n
  • Gitlab CI/CD 管道给出 Dockerfile 错误

    晚上好 我正在尝试将我的nodeJS应用程序部署到我的Digital Ocean Server 它说找不到我的Dockerfile 我确实检查过 Dockerfile 没有 txt 扩展名 任何指导表示赞赏 我在 Gitlab 项目中设置了
  • 如何在Spring Boot中初始化一次MongoClient并使用它的方法?

    您好 我正在尝试导出MongoClient在 Spring Boot 中成功连接后 我尝试在其他文件中使用它 这样我就不必每次需要在 MongoDB 数据库中进行更改时都调用该连接 连接非常简单 但目标是将应用程序连接到我的数据库一次 然后
  • webpack用css/scss文件生成js文件

    描述 在我使用的 webpack 中迷你 CSS 提取插件 plugins new MiniCssExtractPlugin filename name hash css chunkFilename name hash css 加载 scs
  • Nodejs 的简单 put 请求,无需 Express

    我需要能够将 zip 文件上传到 Brightsign 单元 并考虑创建一个 Rest api 我可以发出 put 请求来发送 zip 文件 但问题是我找到的所有例子都是使用express之类的框架 是否可以在不使用额外框架的情况下在 No
  • 节点持久-NodeJS

    谁详细向我解释了如何操作以下说明 var storage require node persist var account username Morris password test storage initSync storage set
  • 如何在 ionic 应用程序中使用 socket.io

    我正在使用 ionic 创建一个应用程序cordova and angular 我必须使用 IP 地址和端口号发出请求 到插座 我读过有关 socket io 的内容 我对如何安装感到困惑套接字 io以及如何与 Angular JS 和 N
  • NodeJS 和 PHP (Laravel) 集成用于 Socket.IO 实时聊天

    目前我有一个我写过的网站PHP通过Laravel 框架 我已经使用写了一个实时聊天nodeJS with 套接字IO and Express现在我想做的是将它集成到我已经编写的 Laravel 网站中 问题是聊天必须在主页中 当前由 Lar
  • 仅使用 find 方法查询 MongoDB 中的对象数组

    查看以下文档contactsMongoDB 3 4 上的集合 id ObjectId 58f045526320ef24fc61fdb2 name John Doe tags name tagA created at ISODate 2017

随机推荐