Reputation: 1710
When I query right after creating and opening mongoose connection as shown below, the query callback is hit and docs are loaded.
var db,
mongoose = require('mongoose');
...
MyClass.prototype.query = function(model, criteria, callback) {
var options = {
server: {
auto_reconnect: true,
socketOptions : {
keepAlive: 1
}
}
};
mongoose.connect('mongodb://localhost/mydatabase', options);
db = mongoose.connection;
db.on('error', console.error.bind(console, 'Error:'));
db.once('open', function () {
model.find(criteria).exec(function(err, docs) {
callback(err, {}, docs);
});
});
};
However, when I create the connection in an initDB
function and make the query later on as shown below, the callback is not called. initDB
is being called before express
server is started.
var db,
mongoose = require('mongoose');
...
function initDB() {
var options = {
server: {
auto_reconnect: true,
socketOptions : {
keepAlive: 1
}
}
};
mongoose.connect('mongodb://localhost/mydatabase', options);
db = mongoose.connection;
db.on('error', console.error.bind(console, 'Error:'));
}
...
MyClass.prototype.query = function(model, criteria, callback) {
db.once('open', function () {
model.find(criteria).exec(function(err, docs) {
callback(err, {}, docs);
});
});
};
What am I missing here? Any help would be greatly appreciated!
Upvotes: 3
Views: 1678
Reputation: 1060
This is most probably because the callback passed to db.once('open', ...
is being called only once when a connection to your database has been established. Try moving the call to db.once()
into your initDB()
function as follows:
var db,
mongoose = require('mongoose');
...
function initDB() {
var options = {
server: {
auto_reconnect: true,
socketOptions : {
keepAlive: 1
}
}
};
mongoose.connect('mongodb://localhost/mydatabase', options);
db = mongoose.connection;
db.once('open', function () {
console.log('Connected to database!');
});
db.on('error', console.error.bind(console, 'Error:'));
}
...
MyClass.prototype.query = function(model, criteria, callback) {
model.find(criteria).exec(function(err, docs) {
callback(err, {}, docs);
});
};
Upvotes: 1