Почему у объекта данных есть поле data.username - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь узнать, как создать приложение для чата, используя socket.io, ejs, nodejs ...

Так что я в основном изучаю код из следующего репо: https://github.com/ngrt/simpleChatApp

Структура папок похожа на
simpleChatApp (родительская папка)
-views (содержит index.ejs)
-public (содержит style.css иchat.js) -app.js (файл с кодом сервера)

app.js имеет app.use(express.static('public')), поэтому public работает как root

Теперь проблема в chat.js (который содержит клиентскую часть)
ниже изображение является частью chat.js

enter image description here

send_message.click(function(){
        socket.emit('new_message', {message : message.val()})
    })

    //Listen on new_message
    socket.on("new_message", (data) => {
        feedback.html('');
        message.val('');
        chatroom.append("<p class='message'>" + data.username + ": " + data.message + "</p>")
    })  

В части emit мы толькоотправил поле сообщения ..... тогда как в части socket.on мы использовали data.username () ... Теперь из того, что я считаю, данные - это в основном объект, который мы отправили в emit .... который не содержал никакихимя пользователя .. так как он может его использовать .. потому что это рабочее репо, поэтому код правильный .. но я не могу понять, почему

1 Ответ

0 голосов
/ 22 декабря 2018

Сообщение, полученное клиентом socket.on, отправляется с помощью узла nodejs (а не клиента, как в вашем коде).Это код node js, к которому добавляется имя пользователя:

socket.on('new_message', (data) => {
  //broadcast the new message
  io.sockets.emit('new_message', {message : data.message, username : socket.username});
})

В целом, в вашем примере несколько клиентов прослушивают сообщение сервера, а сервер прослушивает сигнал каждого клиента.Имя пользователя сохраняется сервером для каждого нового объекта socket.Начальное значение при подключении - «Аноним» и обновляется при change_username событии:

socket.on('change_username', (data) => {
    socket.username = data.username
})

First send_mesasage emit в chat.js принимается получено на app.js и немедленно отправляется всем подключенным клиентам (, включая отправителя ).Сервер добавляет имя пользователя к этому излучению (которое было сохранено в socket объекте сервером).

Затем каждый клиент получает этот emit (у которого уже есть имя пользователя).Все подключенные клиенты затем print получили сообщение и имя пользователя

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