2017-01-12 4 views
0

Контекст:Mongoose запрос бесконечна повесить

  • Mongoose v4.7.6
  • MongoDB v3.2.11

Я пытаюсь обрабатывать ошибки, связанные с моей базы данных в моем программном обеспечении ,

Я застрял в следующей проблеме: когда база данных отключена, запрос мангуста зависает, пока он не будет повторно подключен.


Вот что случилось:

  1. я запускаю мое программное обеспечение
  2. Это подключение к базе данных, хотя мангустов
  3. I Ctrl + Cmongod процесс
  4. я получаю "Disconnect" и "Закрыть" событие из мангуста
  5. я запускаю находку (...) запрос
  6. запрос Поиск повесьте

Что я пробовал:

Я попытался использовать в своей схеме опцию bufferCommands, который, согласно предположению documentation, должен был вернуть mongoose, если нет доступного соединения, но результат тот же.


Что такое мой код?

mongoose.createConnection(..., { 
     server: { 
     // We disable reconnect from mongoose 
     auto_reconnect: false, 
     socketOptions: { 
      // For long running applictions it is often prudent to enable keepAlive. 
      // Without it, after some period of time you may start to 
      // see "connection closed" errors for what seems like no reason. 
      // From mongoose documentation 
      keepAlive: 1, 
     }, 
     }, 
    }) 

ответ

1

Ошибки выбрасываются из соединения мангустов непосредственно всякий раз, когда есть проблема подключения, основной сервер, на котором вы делаете соединение и есть несколько способов справиться с этим в зависимости от того, что вы хотите.

Запрос на поиск, который вы делаете, специально для схемы, которая в конце использует основной объект соединения. Вам придется обрабатывать его таким образом для себя и для пользователей, вам придется настроить тайм-аут для запроса, созданного ими, и отправить им соответствующий ответ.

Отмена запроса на основе тайм-аута

Это может быть сделано на нескольких уровнях, логику вашего сервера, конец вашего клиента или самого мангуста.

Следуйте за ответом этого человека для установления тайм-аута с мангуста, по-видимому, он не задокументирован надлежащим образом мангуста.

https://stackoverflow.com/a/32609226/5225363

Для логики сервера, вы можете создать систему для конкретного запроса, если нет этого, то не отправить ответ обратно клиенту с чем-то другим.

На клиенте, если ответ не получен в течение определенного времени, будьте уверены, что есть какая-то проблема.

p.s По умолчанию установлены таймауты для запросов

+0

Thx для ответа на мой вопрос. Я не совсем понимаю ваш ответ. Поэтому мой запрос на поиск использует схему, а затем основной объект подключения. Что я могу сделать, чтобы отменить запрос? Thx –

+0

@ GrégoryNEUT тайм-аут для функции поиска - вот что я написал в ответ. Если вы не получите ответ на этот конкретный запрос некоторое время, отмените запрос. –

+0

Вы знаете, как отменить запрос, отправленный в мангуст? –