У меня есть nodejs api с koajs (v1.2.0), база данных mongodb и использование mongoose (v4.7.3) для доступа к моим данным.Моя база данных - это набор реплик, расположенный в облаке, и код для подключения выглядит следующим образом:
const options = {
socketOptions: {
socketTimeoutMS: 0,
keepAlive: true
},
auto_reconnect: true,
reconnectTries: Number.MAX_VALUE
}
mongoose.connect(MONGO_URL, {
server: options,
replset: options
});
Все работает, но когда я пытался выключить Wi-Fi, а затем снова включить, я вижу
mongoose.connection.readyState
переходя от 1 (подключен) к 0 (отключен), а затем снова 1 (подключен), что является правильным.Но когда я попытался вызвать конечную точку API, которая запрашивает db:
function *example() {
let data
try {
data = yield model.findOne({});
} catch (e) {
console.log('e', err);
}
this.body = data;
}
Запрос приостанавливается и через некоторое время он возвращается без получения данных от Монго.В консоли отладки Chrome статус запроса (не выполнен) net :: ERR_EMPTY_RESPONSE.
Редактировать: Воспроизвести ошибку: https://github.com/superphung/mongoose-query-pending (следуйте инструкциям в файле readme).Я заметил, что поведение отличается, если я использую набор реплик или автономный mongodb.С набором реплик nodejs не падает, если я удаляю Wi-Fi, но после повторного подключения запрос находится на рассмотрении.При автономном монго приложение зависало, если я отключил соединение Wi-Fi.