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

typ*_*ror 22 mongoose mongodb node.js express

我正在使用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
Run Code Online (Sandbox Code Playgroud)

然后在我的app.js中我就是

require('./database)
Run Code Online (Sandbox Code Playgroud)

并且"mongoose"变量在全球范围内可用.我不想使用全局变量(至少不是直接).有没有更好的方法通过单例模式或其他方法跨节点(我使用express.js)共享数据库连接变量?

Ant*_*lad 29

我只是在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.
Run Code Online (Sandbox Code Playgroud)

此时,任何需要访问该模型的文件都可以:

var mongoose = require('mongoose');
YourModelName = mongoose.model('YourModelName');
Run Code Online (Sandbox Code Playgroud)

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

module.exports.YourModelName = YourModelName;
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是最好的解决方案(大约2天前刚开始围绕导出模块),但确实有效.也许有人可以发表评论,如果这是一个很好的方法.

  • 所需模块中的代码只执行一次.因此您可以根据需要多次使用模块,例如,只创建一次与mongo db的连接 (3认同)

Sub*_*Rao 6

如果你遵循commonjs出口

exports.mongoose = mongoose
Run Code Online (Sandbox Code Playgroud)

让我们说你的模块名称是connection.js

你可以要求

   var mongoose = require('connection.js')
Run Code Online (Sandbox Code Playgroud)

你可以使用猫鼬连接