2015-03-16 3 views
0

Я работаю над домашней страницей, которая отображает текстовые сообщения как часть более крупного проекта. Когда пользователь отправляет запрос GET для/домашняя страница возвращается черезNodeJS update post list

res.render('home', { 
    user: req.ping_session, 
    posts: p_l 
}); 

P_L массив, возвращаемый моей базе данных MongoDB.

Проблема в том, что я пытаюсь обновить список сообщений без перезагрузки страницы, и я не знаю, как обновлять «сообщения», не сохраняя ее как глобальную переменную где-то через JS. Есть ли способ обновить только список сообщений? Я также думал об этом через сокеты, но я не думаю, что это действительно необходимо здесь.

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

Заранее благодарен! :)

кода можно найти здесь: https://github.com/mkocs/ping/tree/testing https://github.com/mkocs/ping/blob/testing/routes/routes.js < - мой маршрутов файл, который возвращает страницу https://github.com/mkocs/ping/blob/testing/views/home.jade < - страница, которая вернулась

ответ

1

Там нет никакого способа, чтобы перезагрузить сообщения без перезагрузки страницы в ваше текущее состояние.

Способ, которым работает ваше приложение в настоящее время, заключается в том, что он получает HTTP-запрос, обрабатывает его, а затем выплевывает (отображает) некоторые данные в браузере. Затем это соединение прекращается. После того, как вы отобрали страницу, у вас нет способа связаться с браузером, если они не откроют с вами новый запрос, и в этом случае у вас не будет способа связать первый запрос со вторым (кроме IP-адреса, который не является на что вы должны положиться).

Возможно, вы захотите заглянуть в websockets (я рекомендую socket.io для узла), который является другим типом соединения, чем обычный HTTP-запрос, где браузер и сервер поддерживают соединение и передают сообщения туда и обратно, а не один ответ на запрос.

Многие сайты используют веб-сайты для таких вещей. Часто они будут использовать микс. Например, когда вы находитесь в Stack Overflow, вы делаете веб-запрос, который отображает страницу, на которую вы смотрите, но SO также поддерживает веб-сайт для небольших событий, таких как «эй, у пользователя есть новое уведомление в своем почтовом ящике». В вашем случае вы можете вызвать событие, которое сообщает клиенту: «Эй, у вашего пользователя есть новое сообщение, ожидающее его/ее». Получив это, вы можете загрузить следующую запись с помощью AJAX (метод создания обычных HTTP-запросов из браузера).

Надеюсь, это даст вам некоторое направление.

+0

Идея состояла в том, чтобы обновить список нажатием кнопки, но я думаю, вы правы, socket.io будет лучше здесь. Спасибо :) – calmandniceperson

+0

, если вы хотите просто обновить сообщения нажатием кнопки, вы можете легко сделать это с помощью простого старого веб-запроса. Я думал, вы хотите, чтобы это было сделано автоматически. если вы используете кнопку, вы можете просто добавить параметр 'offset' к вашему маршруту api, а затем добавить '.skip (offset)' в ваш запрос. Таким образом, вы можете заставить клиента отслеживать количество сообщений в блоге, которые он видел, и сообщить, какой из них он хочет, используя смещение. вы бы использовали ajax для этого и просто манипулировали dom, чтобы добавить этот дополнительный пост поверх остальных. – jtmarmon

+0

Я реализовал это вчера (без части .skip (offset), сделаем это позже). Я все еще не уверен, использовать ли сокеты или нет. Я попытался реализовать это, но это была большая проблема, поэтому я пошел на хороший веб-запрос. Я не знаю, как получить свой cookie сеанса и разрешить пользователю, и получил только такие ошибки, как «Соединение закрыто до получения рукопожатия» или «Ошибка 404» (но только иногда.Любые рекомендации? – calmandniceperson