如何使用mongoose动态连接多个mongodb数据库?

2024-02-01

我的项目中有很多数据库,一个是masterDb,其他都是基于masterDb的数据库连接。例如,在验证页面中,用户可以输入“公司 ID”,可以使用 masterDb 检查该“公司 ID”,如果 ID 存在,则返回特定公司的数据库名称。使用数据库名称我想连接到特定的公司数据库。

现在我可以成功登录并获得数据库名称。使用这个数据库名称(req.headers['x-key-db'])我可以连接到特定的数据库。但在这里我将数据库连接代码放置在每个 api 调用中。有没有其他方法可以创建一次并在每个 api 调用中动态使用它。

app.get('/api/student-limited/:_pageNumber/:_pageSize', function(req, res) {
		
	var db = mongoose.createConnection();
	db.open('mongodb://localhost:27017/'+req.headers['x-key-db']);
	var ClassSection = db.model('ClassSections', SectionSchema);
	var Student = db.model('Students', StudentSchema);
	
	var _pageNumber = parseInt(req.params._pageNumber), _pageSize = parseInt(req.params._pageSize);
	Student.find({}, function (err, _docs) {
		if(_docs){
			Student.find({}, null, {sort: { Name: 1} }).skip(_pageNumber > 0 ? ((_pageNumber-1)*_pageSize) : 0).limit(_pageSize).populate('_idClass').exec(function (err, docs) {
			if(err)
				res.json(err);
			else
				res.json({ "TotalCount" : _docs.length, "_Array" : docs});
		     });
	    }
	});
});

您可以创建一个如下所示的模块,它将检查您需要的数据库的数据库连接是否已经存在。如果存在,它将返回连接对象,否则它将创建一个并返回它。

var mongoose = require('mongoose');

//Object holding all your connection strings
var connections = {};

exports.getDatabaseConnection = function(dbName) {

    if(connections[dbName]) {
        //database connection already exist. Return connection object
        return connections[dbName];
    } else {
        connections[dbName] = mongoose.createConnection('mongodb://localhost:27017/' + dbName);
        return connections[dbName];
    }       
}

假设您将上述文件命名为data.js。您只需在包含 API 代码的文件中引用此模块即可。您的 API 代码将更改为:

app.get('/api/student-limited/:_pageNumber/:_pageSize', function(req, res) {
    //Call getDatabaseConnection function we created
    var db = data.getDatabaseConnection(req.headers['x-key-db']);
    var ClassSection = db.model('ClassSections', SectionSchema);
    var Student = db.model('Students', StudentSchema);

    var _pageNumber = parseInt(req.params._pageNumber), _pageSize = parseInt(req.params._pageSize);
    Student.find({}, function (err, _docs) {
        if(_docs){
            Student.find({}, null, {sort: { Name: 1} }).skip(_pageNumber > 0 ? ((_pageNumber-1)*_pageSize) : 0).limit(_pageSize).populate('_idClass').exec(function (err, docs) {
            if(err)
                res.json(err);
            else
                res.json({ "TotalCount" : _docs.length, "_Array" : docs});
             });
        }
    });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用mongoose动态连接多个mongodb数据库? 的相关文章

  • 使用cheerio 检索href

    我有一个下载的 html 文件 看起来像这样 div div div div style height 11px color white font size 9px font weight bold div div style border
  • HTML 格式的 Google Apps 脚本

    是否可以在我的 HTML 中使用 google apps 脚本 我希望能够从外部框架 例如 Node js 以纯 Javascript 形式从表单写入电子表格 https developers google com apps script
  • Node.js http get 请求错误事件未拾取 404 或 403

    我正在对图像发出 HTTP GET 请求 有时图像会以 404 或 403 的形式返回 令我惊讶的是 我必须明确检查这一点 而不是在错误事件中选择它 这是它的工作原理还是我在这里遗漏了一些东西 function processRequest
  • 沙箱中的 Nodejs

    我使用 NodeJS 作为客户端浏览器和服务器之间的中间人来处理所有请求 我正在尝试使用 nodejs 作为过滤工具并突出显示 如果不是 所有恶意脚本 但我意识到nodejs让脚本以当前环境权限运行 因此 我决定通过安装沙箱在新的上下文中运
  • 使用 Java 进行 MongoDB 查询。计算数组中的匹配项

    我在 Mongo 中存储了类似于以下内容的数据 LIST NAME a VALUE z NAME b VALUE y NAME c VALUE x NAME d VALUE w NAME e VALUE v NAME f VALUE u N
  • 护照本地猫鼬帐户注册的附加字段?

    我将 Passport local mongoose 与 Node js Express js MongoDB 一起用于 Web 应用程序 我想使用用户名字段 密码字段 公司名称字段和电话号码字段 所有字段 来注册用户作为字符串 但是 我只
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • 在最新的 MongoDB java 驱动程序中使用 createIndex() 时,索引已存在并出现不同选项错误

    所以我将 MongoDB java 驱动程序升级到 2 12 4 其中ensureIndex 方法已被弃用 我改为使用createIndex 从文档来看 该方法的功能类似于ensureIndex 但是 当我在生产中使用此方法时 出现以下错误
  • Node.js 重写 toString

    我试图覆盖我的对象的默认 toString 方法 这是代码和问题 function test this code 0 later on I will set these this name test prototype toString f
  • Firebase 模拟器启动时失败找不到模块 --dns-result-order=ipv4first

    Firebase 模拟器11 0 0无法启动 firebase emulators start 当它到达模拟器 UI 时抛出异常 i ui 模拟器 UI 日志记录到 ui debug log ui 发生致命错误 模拟器 UI 已退出 代码为
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数
  • 在回调中使用await(Microsoft Bot Framework v4 Nodejs)

    我正在尝试将回复发送回chatbot emulator从内部回调 async getUserDetails step console log inside get userdetaiuls modeiule this userDBObjec
  • 如何在 mongoid 中使用 or 条件进行查询

    如何在 Mongoid 中使用 or 条件进行查询 这是 OR 在 mongoid 中查询 如果你想要像下面这样的查询 select from user where id 10 or name hitesh 在带有 mongoid 的 Ra
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 具有 Firebase (FCM) 推送通知的 Node js

    我正在使用 Node js 开发 REST api 并且有一个休息端点来发送 firebase 推送通知 我的代码如下 const bodyParser require body parser var cors require cors v
  • Node.js - console.log 不显示数组中的项目,而是显示 [Object]

    我在注销对象内数组的内容时遇到问题 实际的物体看起来像这样 var stuff accepted item1 item2 rejected response Foo envelope from The sender to new item1
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • mongodb 获取最后插入的文档

    此 Meteor 代码尝试查找集合中的最后一个文档 find userId this userId sort createdAt 1 limit 1 但由于所有文档都是按时间顺序排列的 我想删除createdAt字段 所以一旦被 删除 是否

随机推荐

  • 构建GCC:bootstrap有哪些优点和缺点?

    我了解引导编译器构建的作用 但我不了解普通用户的优点和缺点 我认为对于 GCC 维护者来说是有价值的 配置GCC时 有两个选项 enable bootstrap and disable bootstrap 据我了解 对于普通编译器构建 en
  • SQL删除性能

    delete from a A where a ID 132 A表包含大约5000条记录 A ID是A表的主键 但是删除需要很长时间 有时它也会超时 该表包含三个索引 并由三个外键引用 谁能解释一下为什么即使我们是基于主键删除 它仍然需要很
  • 如何将所有请求修改为单个文件而不导致无限循环

    如何将所有请求发送到 www myurl com ANYTHING 并将它们全部发送到 www myurl com index php 我发现我可以通过以下方式发送所有内容 RewriteRule index php R Permanent
  • 无法在 Firefox 3.6 中的表格上获取最小高度

    我有一个问题 最小高度不适用于我绝对定位的桌子 但是 我可以使用高度在 IE 6 中工作 据我所知 IE 6 将高度视为最小高度 关于我如何让它发挥作用的任何线索 table cellspacing 0 style width 100 mi
  • Wii MotionPlus 支持

    我正在开发一个与Wiimote http en wikipedia org wiki Wii Remote 到目前为止我一直在使用维尤斯图书馆 http www wiiuse net 效果很好 然而 wiiuse 不支持运动加 http e
  • 定义 TypeScript 回调类型

    我在 TypeScript 中有以下类 class CallbackTest public myCallback public doWork void doing some work this myCallback calling call
  • 对象化关系:一对多,我可以有效地做到这一点吗?

    我对 Objectify 还很陌生 我有一个简单的问题 做某事的最好方法 假设我有一个允许人们发送和接收的应用程序 消息 为简单起见 请考虑电子邮件 当我的应用程序加载时 我没有 想要加载来自每个联系人的每条消息 向给定用户发送消息 那将是
  • 跨安装的 ios 唯一标识符

    我们需要唯一地标识该设备 并且它在安装 重新安装 时必须相同 到目前为止 我们一直在使用存储在钥匙串中的标识符 因此它在安装过程中仍然存在 现在 在 10 3 beta 版中 卸载应用程序时 钥匙串会自动删除 参考 https forums
  • Eclipse Neon CDT 运行配置未设置环境变量

    我刚刚从 Eclipse Kepler 升级到 Neon 3 发现除非在调试器下运行 否则在运行配置中设置环境变量不起作用 截至 2017 年 2 月 6 日 这被确定为 Neon 3 中的回归问题 但我一直无法找到解决方案 有其他人看到这
  • 在绘图文本过滤器中正确转义文本

    根据文件 应该用斜杠转义 但当我逃脱时 未添加文本 有错误消息说Stray near 但这是什么意思以及我该如何解决它 命令和输出 usr bin ffmpeg y i home www 255871 mov af aresample as
  • 为什么 Guava 中不推荐使用 Files.deleteDirectoryContents() ?

    在 Guava 10 中 Google 已弃用文件 deleteDirectoryContents https google github io guava releases 10 0 api docs com google common
  • GADT 上的模式匹配失败

    我更多地使用 ReasonML 并发现了模式匹配type t从以下示例开始 无法处理该错误 错误 此模式与 t float 类型的值匹配 但需要一个与 t int 类型的值匹配的模式 float 类型与 int 类型不兼容 type t a
  • Pandas str 和 object 类型的区别

    Numpy 似乎区分了str and object类型 例如我可以这样做 gt gt gt import pandas as pd gt gt gt import numpy as np gt gt gt np dtype str dtyp
  • 从文件读取清单时出现异常。 Microsoft Word 插件 VSTO

    我正在尝试创建一个 Microsoft Word 插件 每次保存 Word 文档 自动保存或手动保存 时 该插件都会添加并提交到 git 存储库 当我从 Visual Studio 调试模式 中运行程序时 我已经能够获得我想要的功能 当我发
  • constexpr 函数在多个模块中共享

    当我使用 constexpr 函数时 我注意到一个奇怪的行为 我将代码简化为一个简化的示例 从两个不同的翻译单元 模块 A 和 B 调用两个函数 include
  • IllegalStateException: 当前不在 FragmentManager 中

    我知道这听起来像是重复的FragmentStatePagerAdapter IllegalStateException 当前不在 FragmentManager 中 https stackoverflow com questions 112
  • 在我的 Node 应用程序中使用 SSH 连接到 MongoDB

    我的数据库使用 DigitalOcean 我正在尝试在我的节点应用程序中连接到它 我发现了一个名为的 npmtunnel ssh但是我无法连接到它 我的代码如下 它说数据库连接成功 但是当我执行console log mongoose 它显
  • 小程序未显示完整

    我刚刚创建了一个小程序 public class HomeApplet extends JApplet private static final long serialVersionUID 7650916407386219367L Call
  • 为数据层中的实体添加与 .NET Identity ApplicationUser 的关系

    我正在构建一个带有用户登录身份的 NET MVC 应用程序 该应用程序有四层 Web UI 层 参考了我的域和服务层 领域层 没有引用 服务层 参考了我的数据层和领域层 数据层 参考了我的领域层 我想要我的AppUser类与我的数据层中的实
  • 如何使用mongoose动态连接多个mongodb数据库?

    我的项目中有很多数据库 一个是masterDb 其他都是基于masterDb的数据库连接 例如 在验证页面中 用户可以输入 公司 ID 可以使用 masterDb 检查该 公司 ID 如果 ID 存在 则返回特定公司的数据库名称 使用数据库