我正在使用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)
并且“mongoose”变量在全球范围内可用。我不想使用全局变量(至少不是直接)。是否有更好的方法通过单例模式或其他方法跨节点(我使用express.js)共享数据库连接变量?
答案 0 :(得分: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.
此时,任何需要访问该模型的文件都可以:
var mongoose = require('mongoose');
YourModelName = mongoose.model('YourModelName');
最后在您的模型中,您可以正常编写文件,然后将其导出到底部:
module.exports.YourModelName = YourModelName;
我不知道这是否是最好的解决方案(大约2天前刚刚开始围绕导出模块)但它确实有效。如果这是一个很好的方法,也许有人可以评论。
答案 1 :(得分:6)
如果您关注commonjs exports
exports.mongoose = mongoose
让我们说你的模块名称是connection.js
你可以要求
var mongoose = require('connection.js')
你可以使用mongoose连接
答案 2 :(得分:2)
我通常会像这样包装我的模型
var MySchema = (function(){
//Other schema stuff
//Public methods
GetIdentifier = function() {
return Id;
};
GetSchema = function() {
return UserSchema;
};
return this;
})();
if (typeof module !== 'undefined' && module.exports) {
exports.Schema = MySchema;
}
在我的主要课程中,我执行此操作var schema = require('./schema.js').Schema;
并调用conn.model(schema.GetIdentifier(), schema.GetSchema())
,当然在调用connect或createConnection之后。这允许我将模式插入到标准方法集中。这种概括很好,因为在掌握了连接和错误处理之后,您可以专注于您的模式。我还使用插件扩展模式,这允许我与其他模式共享插件。
我一直在寻找一些身体是否已经做得更好,但看不到找到一个好的模式,而且我对Mongo来说相当新。
我希望这会有所帮助。