gpt4 book ai didi

javascript - 在另一个函数中创建 Mongoose 连接时不调用查询回调

转载 作者:可可西里 更新时间:2023-11-01 09:52:20 27 4
gpt4 key购买 nike

如下所示,当我在创建并打开 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 函数中创建连接并稍后进行如下所示的查询时,不会调用回调。 initDBexpress 服务器启动之前被调用。

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);
});
});
};

我在这里错过了什么?任何帮助将不胜感激!

最佳答案

这很可能是因为传递给 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);
});
};

关于javascript - 在另一个函数中创建 Mongoose 连接时不调用查询回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com