我在Windows Azure上安装了一个带有MongoLab插件的应用程序,我遇到了一个问题,即在部署应用程序后应用程序运行良好,但是在几分钟不活动的时间后,我得到了一个数据库错误:
没有副本集主可用于使用ReadPreference PRIMARY的查询
在我重新启动相同模式返回的网站之前,此错误不会消失 - 在错误返回时几分钟闲置几分钟
我的基本应用代码:
mongoConnect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, {
server: {
auto_reconnect: true,
socketOptions: {
socketTimeoutMS: 120000,
keepAlive: 1
}
},
replSet: {
socketOptions: {
socketTimeoutMS: 120000,
keepAlive: 1
}
}
}).then(function (db) {
//app configure ...
http.createServer(app).listen(app.get('port'), function () {
console.log("Express server listening on port " + app.get('port'));
});
});
* mongoConnect是mongoclient.connect的简单“promisified”功能
我理解这是最佳做法,我正在建立与db的一个连接,然后为所有请求重用该db对象。通过阅读https://support.mongolab.com/entries/23009358-Handling-dropped-connections-on-Windows-Azure之类的内容,我将套接字超时设置为2分钟,以防止任何防火墙过早杀死套接字并自动重新连接为true,以便重新连接,但这两种设置都不能解决问题。