I'm using Mongoose to manage a Mongo database. My connection file is quite simple:
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
Then in my app.js I just
require('./database)
and the "mongoose" variable is available globally. I'd prefer not to use globals (at least not directly). Is there a better way of sharing the database connection variable across node (I'm using express.js) via a singleton pattern or some other method?
I just do the following in my app.js file:
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.
At this point any file that needs access to that model can do:
var mongoose = require('mongoose');
YourModelName = mongoose.model('YourModelName');
And finally in your model, you can have the file written normally then export it at the bottom:
module.exports.YourModelName = YourModelName;
I don't know if this the best most awesome solution (just started wrapping my head around exporting modules about 2 days ago) but it does work. Maybe someone can comment if this is a good way to do it.
if you follow commonjs exports
exports.mongoose = mongoose
let us say your module name is connection.js
you can require
var mongoose = require('connection.js')
you can use mongoose connection
I generally wrap my models like this
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;
}
And in my main class, I do this var schema = require('./schema.js').Schema;
and call conn.model(schema.GetIdentifier(), schema.GetSchema())
and of course after calling connect, or createConnection. This allows me to plugin schema in to standard set of methods. This generalization is good because you can concentrate on your schema after you have mastered connection and error handling. I also extend the schema with plugins, and that allows me to share plugins with other schemas.
I was looking to see if some body has done this better, but can't see to find a good pattern, and I am fairly new to Mongo.
I hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With