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), данные вновь обновятся и клиент получит уже обновленные данные. Этого не происходит, при клике данные добавляются, но не обновляются, приходиться обновлять страницу для получения результата |
Хе.
new Articles({ title : data.title }).save( function() { // Отправляем обновленные данные клиенту Articles.find((err, articles) => { socket.emit('news', articles); }).sort({date : -1}); }); |
Вот еще вариант нашел использовать вместо new Article
Articles.create({ title : data.title, text: data.text }, (err,doc) => { io.emit('up', doc); }); И на клиенте по событию up просто вставляем крайний элемент в DOM Плюс в том, что идет выборка не всей таблицы и далее перестроение всего списка, а только крайне добавленного |
Часовой пояс GMT +3, время: 06:07. |