当前位置: 首页 > 面试题库 >

与mongoose / node.js共享数据库连接参数的最佳方法

楚流觞
2023-03-14
问题内容

我正在使用Mongoose来管理Mongo数据库。我的连接文件非常简单:

var mongoose = require('mongoose')

mongoose.connection.on("open", function(){
  console.log("Connection opened to mongodb at %s", config.db.uri)
});
console.log("Connecting to %s", config.db.uri)
mongoose.connect(config.db.uri)

global.mongoose = mongoose

然后在我的app.js中

require('./database)

并且“猫鼬”变量在全球范围内可用。我不想使用全局变量(至少不直接使用)。是否有更好的方法通过单例模式或其他方法在节点之间共享数据库连接变量(我正在使用express.js)?


问题答案:

我只是在app.js文件中执行以下操作:

var mongoose = require('mongoose');
mongoose.connect('mongodb://address_to_host:port/db_name');
modelSchema = require('./models/yourmodelname').YourModelName;
mongoose.model('YourModelName', modelSchema);
// TODO: write the mongoose.model(...) command for any other models you have.

此时,任何需要访问该模型的文件都可以执行以下操作:

var mongoose = require('mongoose');
YourModelName = mongoose.model('YourModelName');

最后,在模型中,可以正常编写文件,然后将其导出到底部:

module.exports.YourModelName = YourModelName;

我不知道这是否是最好的最棒的解决方案(大约两天前才开始将我的头缠在导出模块上),但是它确实有效。也许有人可以发表评论,如果这是个好方法。



 类似资料:
  • 我正在构建一个节点应用程序,它将查询简单的和更复杂的(多连接)查询。我正在寻找关于我应该如何管理mySQL连接的建议。 我有以下几个要素: server.js:express Router1.js(虚构名称):快速路由器中间件 Router2.js(虚构名称):快速路由器中间件 我是否应该在每次请求“/router1/”时都连接到mysql,就像本例中那样,还是最好在启动时保持一个连接打开?作为:

  • 问题内容: 在Java Servlet中管理数据库连接的最佳方法是什么? 当前,我只是在函数中打开一个连接,然后在中将其关闭。 但是,我担心“永久地”保持数据库连接可能是一件坏事。 这是处理此问题的正确方法吗?如果没有,有什么更好的选择? 编辑:给出更多的说明:我尝试为每个请求简单地打开/关闭一个新连接,但是通过测试,由于创建了太多的连接,我看到了性能问题。 通过多个请求共享连接是否有任何价值?此

  • 问题内容: 我有一个用Go编写的Web服务,目前我将这个Global包导入到任何地方,其中包含与MongoDB的连接(通过MGO),但是我不得不说这对我来说非常讨厌。在Go中维护与数据源的连接的最佳实践是什么?我来自PHP世界,因此来自Global:S 问题答案: 导入一个将初始化对象导出为包级别变量或通过访问器/初始化程序导出的包没有错。后者也许对古典“ OOP主义者”更具吸引力。

  • 我正在创建一个多租户应用程序,在该应用程序中,我基于子域连接到该特定租户的数据库。 下面是执行此操作的代码: 这是连接数据库的最佳方式,还是存在任何问题,因为我是从性能的角度考虑的,因为每次连接数据库时都有不同的子域。最好的方法是什么?

  • 我正在尝试为一个Saas应用程序建模,在这个应用程序中,我将让不同的公司使用这些服务。我有点困惑于为这种类型的服务建模我的猫鼬数据库的最佳方式。 所以这个模型有点像 为这样的应用程序建模的最佳方式是什么? 我是否应该为用户、项目等创建不同的模型,并将公司唯一ID附加到该公司内的所有用户或项目。也可以在公司模型中引用这些用户或项目。差不多 或者 只需在公司模式中引用用户和项目模式,而不需要单独的模型

  • 我对微服务还是一个新手,有一些基本的架构问题现在还无法解决。我使用Quarkus框架和标准扩展(如quarkus-resteasy和quarkus-rest-client)来实现。 这两个服务都是作为Maven项目创建的。根据教程,我发现正确的方法是在项目中声明一个接口(这里称为),如下所示 然后通过@inject将此接口集成到服务中,这导致了以下示例性服务。 我使在端口8181上本地运行,并在项