当我在创建和打开mongoose连接后立即查询,如下所示,查询回调被点击并加载文档。
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);
});
});
};
但是,当我在initDB
函数中创建连接并稍后进行查询时,如下所示,不会调用回调。在initDB
服务器启动之前调用express
。
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);
});
});
};
我在这里缺少什么?任何帮助将不胜感激!
答案 0 :(得分:1)
这很可能是因为传递给db.once('open', ...
的回调只在建立与数据库的连接时被调用一次。尝试将来电db.once()
移至initDB()
功能,如下所示:
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);
});
};