Как мне отправить данные mongodb? - PullRequest
0 голосов
/ 28 ноября 2018

Итак, я разработал веб-приложение для хобби на Handlebars, Express и Mongoose / MongoDB.

Приложение позволяет пользователям создавать учетные записи, а затем публиковать рекламные объявления для просмотра и ответа других пользователей.

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

Теперь проблема, с которой я сталкиваюсь, заключается в том, когда пользователь А размещает объявление, а пользовательB вошел в систему и в настоящее время находится на странице индекса (страница, на которой перечислены все опубликованные объявления), он не будет отображаться для пользователя B, если пользователь B не обновит страницу.На самом деле это так, потому что только когда будет пройден маршрут страницы индекса, она будет запрашивать все объявления, а обновление в основном попадает на путь индекса, который я получаю.Но я не хочу этого так.Я хочу, чтобы оно показывало новое объявление по индексу пользователя B и почти по каждому индексу пользователя, если есть новое объявление какого-либо пользователя.

Итак, я провел небольшое исследование / чтение и узнал, что могу это сделать, научившись работать с триггерами на mongodb и, например, создать какой-то триггер, который при публикации нового объявления что-то делает.Мне нравится идея, но мне не удалось найти ресурсы, чтобы узнать, как использовать такую ​​вещь.

Другой вариант, который мне предложили, - это использовать socket.io, но я тоже не могу понять, как я могу сделать весьРекламный документ работает как сокет.Я потерян, и реализация этой функции динамической загрузки рекламы для всех пользователей завершит мой хобби-проект и поможет мне найти работу младшего разработчика в местном сообществе.

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

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Best Way Вы можете использовать концепцию Short Polling со стороны клиента, чтобы запрашивать новые данные через 1 или 2 секунды (что бы ни считалось необходимым). Gmail для новых почтовых ящиков также использует метод sync особым образом.Просто запросите у сервера новые данные

ИЛИ Второй вариант:

На стороне сервера
Служить index.html Страница дляПользователь A (который вошел в систему сейчас).
Некоторые пользователи B вставляют данные
Сохраняют функцию или задание cron (проверяет количество общих объявлений). Скажем, через каждую минуту или около того
Если естьизменим количество от предыдущего total_count, обновим его, получим новые документы mlab и отправим его в функцию. Допустим, push_new_ads , который будет синхронизироваться через socket.io с клиентом


На стороне клиента

Синхронизируйте client_total_count с server_local_count push_new_ads с помощью socket.io и, если есть изменение в количестве, сделайте простой fetch api вызовполучить данные и добавить их в ранее извлеченный массив

Нет такого способа напрямую прослушивать изменения в mongodb, но вы можете вызвать некоторые изменения из оплога, используя настраиваемые курсоры

0 голосов
/ 28 ноября 2018

socket.io, кажется, лучшее решение для вашего случая.Что вы захотите делать с socket.io - каждый раз, когда пользователь публикует объявление, вы используете socket.io, чтобы уведомить остальных пользователей об обновлении.

Если вы не хотите отправлять весь документ с использованием сокета, вы можете использовать сокет для уведомления клиентов, а на стороне клиента каждый раз, когда вы получаете такое уведомление от сервера, вы либо

a) Обновите страницу (не предлагается, так как это сделает пользовательский опыт неприятным), что легче реализовать

ИЛИ

b) Вы можете использовать Ajax-запрос, чтобы получить новыйданные с вашего сервера и обновлять поля на лету (что делает для удобства пользователей).

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