Browse Source

pre alpha

Ivan Asmer 6 năm trước cách đây
mục cha
commit
a49a2ee8f3
1 tập tin đã thay đổi với 73 bổ sung0 xóa
  1. 73 0
      02.md

+ 73 - 0
02.md

@@ -93,3 +93,76 @@ jsonPost('http://localhost:3000', {data: "someData", time: (new Date()).getTime(
 
 ![server](http://shots.asmer.org.ua/2018_06_15__23_11_05.png)
 
+Теперь наша задача - разобраться с тем, откуда взять данные для отправки и отправлять их.
+Кстати, было бы неплохо в чате добавить еще и имя пользователя. Добавьте его в верстку (еще одно поле `input` с `id="nick"`)
+
+#### Отправляем настоящие данные
+
+Давайте договоримся, что данные которые мы отправляем, будут иметь следующую структуру:
+```javascript
+{
+    action: "ADD_MESSAGE", //при общении с сервером у нас будет несколько операций, какие?
+    nick: "Имя пользователя", 
+    message: "Сообщение"
+}
+```
+
+Добавьте в ваше ДЗ код, который, используя `jsonPost` будет отправлять реальный `nick` и `message` из полей ввода на сервер. Проверьте, что сервер в консоли пишет пришедшие данные.
+
+### Получение и хранение сообщений на сервере.
+
+Давайте подумаем, какие у нас есть типы данных и какой более всего подходит для хранения сообщений на сервере.
+
+```javascript
+...
+    var data = JSON.parse(body);
+    if (data.action == 'ADD_MESSAGE'){
+        //сохраняем новое сообщение
+        console.log()//убеждаемся, что все сохранилось
+        res.end(JSON.stringify({status: 'ok'}));
+    }
+    else {
+        console.log('UNKNOWN ACTION')
+        console.log(data)
+    }
+...
+```
+
+### Выдача сообщений из сервера на клиент
+
+Для того, что бы клиент "спросил" набор сообщений, пусть будет структура данных следующего вида:
+```javascript
+{
+    action: 'GET_MESSAGES', //операция получения
+}
+```
+
+### Сервер: выдача сообщений
+
+```javascript
+...
+    if (data.action == 'GET_MESSAGES'){
+        res.end(JSON.stringify({status: 'ok', data: ....})) //выдача сообщений в клиент
+    }
+...
+```
+
+### Клиент: обработка пришедших сообщений
+
+В силу наличия асинхронного ада в **JS**, данные приезжают не сразу, а передаются в функцию *впоследствии*. Один из подходов - использовать промисы:
+
+```javascript
+jsonPost('http://localhost:3000', { action: 'GET_MESSAGES'}).then( data => console.log(data) ) //данные будут в стрелочной функции в переменной data
+```
+
+### Отображения истории сообщений
+
+Теперь надо циклически обработать сообщения и добавить их в окно наших сообщений в чате.
+
+### Poll
+
+Используем `setInterval` для периодической проверки сообщений.
+
+### Как проверять?
+
+Откройте две вкладки с чатом и пообщайтесь сами с собой. Приятно же поговорить с умным человеком