Reputation: 3688
I'm trying to get my head around how mongoose uses it's connection. At the moment I have:
// Datastore.js
var mongoose = require('mongoose'),
conn = mongoose.createConnection();
...
conn.open(host, database, port, options, callback); // Opens connection
// Model.js
var mongoose = require('mongoose');
var Schema = new mongoose.Schema({...})
module.exports = exports = mongoose.model('MyModel', Schema);
// Controller.js
var mongoose = require('mongoose');
var MyModel = mongoose.model('MyModel'); // Retrieves the model ok
MyModel.find({}, function(err, docs){
if(err){} //
console.log(docs); // Does not work
});
However this doesn't work... it only works if somehow I pass the connection across like so:
// Datastore.js
var mongoose = require('mongoose'),
conn = mongoose.createConnection();
...
conn.open(host, database, port, options, callback); //
mongoose.set('db', conn);
// Controller.js
var mongoose = require('mongoose'),
db = mongoose.get('db');
var MyModel = db.model('MyModel'); // Retrieve the model using the connection instance
MyModel.find({}, function(err, docs){
if(err){} //
console.log(docs); // Works
});
I think I'm approaching this in the wrong way... should the first approach work, and I'm doing something wrong?
Upvotes: 4
Views: 7017
Reputation: 311925
It's easiest to just open the default connection pool that's shared by all your mongoose calls:
// Datastore.js
var mongoose = require('mongoose'),
db = mongoose.connect('localhost', 'dbname');
Then in all your other files access the pool using mongoose.model(...)
.
Upvotes: 8
Reputation: 1367
Looking at the docs it says:
var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'test');
Perhaps you need to put your connection details in for the create Connection
var mongoose = require('mongoose'),
conn = mongoose.createConnection('localhost', 'test');
Upvotes: 2