Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2018, 14:16
Интересующийся
Отправить личное сообщение для monstantin Посмотреть профиль Найти все сообщения от monstantin
 
Регистрация: 04.01.2017
Сообщений: 12

Socket IO + MongoDB
Клиент
<form method="POST">
	<input type="text" name="title">
	<button>Отправить</button>
</form>

<ul id="list"></ul>

<script src="/socket.io/socket.io.js"></script>
<script>

	var socket = io();

	function getDataForm(ev) {
		 socket.emit('SubmitForm', { title: title.value });
		 title.value = '';
		 ev.preventDefault();
	}

        form.addEventListener('submit', getDataForm);

	// Принимаем данные от сервера
	socket.on('news', function (data) {
		 // Выводим данные в ul#list
        });	

</script>



Сервер
app.get('/', (req,res) => {
	res.render('home');
});


io.on('connection', function(socket){
    socket.on('SubmitForm', function (data) {
 	
      new Articles({ title :  data.title }).save();


    // Отправляем обновленные данные клиенту 
    Articles.find((err, articles) => {        
    	 socket.emit('news', articles);
    }).sort({date : -1});

  });

  Articles.find((err, articles) => {        
      socket.emit('news', articles);
  }).sort({date : -1});

});


При подключении, emit news отрабатывает отлично, отправляет все данные клиенту, где они уже и выводятся, но как только клиент отправляет новые новые данные на сервер, ожидается , что после добавления(new Articles), данные вновь обновятся и клиент получит уже обновленные данные.

Этого не происходит, при клике данные добавляются, но не обновляются, приходиться обновлять страницу для получения результата
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2018, 18:09
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Хе.
new Articles({ title :  data.title }).save( function() {
    // Отправляем обновленные данные клиенту
    Articles.find((err, articles) => {       
    socket.emit('news', articles);
    }).sort({date : -1});
});
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2018, 00:13
Интересующийся
Отправить личное сообщение для monstantin Посмотреть профиль Найти все сообщения от monstantin
 
Регистрация: 04.01.2017
Сообщений: 12

Вот еще вариант нашел использовать вместо new Article
Articles.create({ title :  data.title,
      text: data.text }, (err,doc) => {        
    	   io.emit('up', doc);
      });


И на клиенте по событию up просто вставляем крайний элемент в DOM
Плюс в том, что идет выборка не всей таблицы и далее перестроение всего списка, а только крайне добавленного
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка NodeJS, Gulp, MongoDB на OpenServer. Blondinka Общие вопросы Javascript 2 19.12.2016 11:48
mongodb и frontend torsar Оффтопик 43 18.12.2015 02:12
Помогите разобраться с Socket IO rdbn AJAX и COMET 0 17.09.2014 16:59
Nodejs net socket server and android socket client kames AJAX и COMET 9 31.08.2014 20:49
Установка mongodb для node.js Magneto Серверные языки и технологии 1 11.08.2014 15:29