Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Best way to share database connection param with mongoose/node.js

Best way to share database connection param with mongoose/node.js

Problem

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?

Problem courtesy of: typeoneerror

Solution

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.

Solution courtesy of: AntelopeSalad

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

Best way to share database connection param with mongoose/node.js

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×