Node.js / Express и mongoose: создать "наблюдаемое" соединение mongodb с автоматическим извлечением новых данных? - PullRequest
0 голосов
/ 14 сентября 2018

Я использую MEAN Stack и делаю асинхронный запрос к моей базе данных mongodb с помощью mongoose.Теперь у меня есть диаграмма в угловом интерфейсе, которая отображает некоторые данные из запроса mongodb.Дело в том, что данные обновляются каждые 1 минуту, и я хочу автоматически вытягивать и обновлять график каждые 15 минут.Можно ли как-то автоматически отразить это в мангусте?Или как вообще это понять?Я думаю, что есть разные подходы:

1.Я мог бы делать http-запрос каждые 15 минут в Angular-интерфейсе, но это, вероятно, не очень хороший стиль, как я слышал, http-запросы являются наблюдаемыми, которые создают поток сокетовк вашему источнику api, это правда?

2.Если эти наблюдаемые отслеживают изменения, по-прежнему нет никакой связи между отслеживанием новых данных внутри mongodb с помощью mongoose и frontend (Frontend ничего не знает оновые данные, так как данные отправляются из API).Я мог бы попробовать что-то вроде «push» или обновить с помощью таймера, который запускает запрос API и выполняет функцию API каждые 1 минуту или около того из бэкэнда, но я не знаю, как это сделать, так как Promises запускаются только один раза не наблюдаемые ... может быть, это работает с обратными вызовами?Как это сделать в Node.js / Express и mongoose?

1 Ответ

0 голосов
/ 14 сентября 2018

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

  1. Угловой HttpClient просто выполняет HTTP-вызов, когда вы подписываетесь на наблюдаемое.Это приводит к выполнению только одного запроса, поэтому поток сокетов, как вы упомянули, отсутствует.Опрос бэкэнда каждые 15 минут или около того на самом деле не очень желателен, так как гораздо более элегантным решением было бы немедленное получение изменений по мере их появления. читать дальше ) и отправлять уведомление с вашего бэкэнда всякий раз, когда новые данные готовы.Это позволит вам немедленно обновить свой интерфейс с изменениями.Вы можете использовать Socket.IO ( docs ) и публиковать новое сообщение при каждом обновлении базы данных.Socket.IO немного проще в реализации, чем обычный API веб-сокетов, который я нахожу, и прибегнет к другим механизмам длинных опросов, если веб-сокеты недоступны.(далее объясняется в этой теме SO здесь: socket.io fallbacks . В RxJs есть выделенная наблюдаемая, которую вы можете использовать для подписки на ваш поток веб-сокетов и получения новых событий, передаваемых через ваши веб-сокеты: RxJsWebsockets . Настройка собственных наблюдаемых для подписки на ваши события websocket также довольно тривиальна, если вы решите сделать это вместо этого.

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