запрос мангуста, ожидающий после переподключения - PullRequest
0 голосов
/ 31 мая 2018

У меня есть 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...