Я пытаюсь создать базовое приложение для чата с socketIO, express, mongoDB, все работает нормально.
Мне нужна функциональность, добавляется самое новое сообщение, а div сообщения прокручивается вниз,это работает.
Приложение имеет следующий формат:
$("#textdiv").append(` <li class='blueText'> <img src="//unsplash.it/50/50"/> ${message.name} </li> <p class='blueText'> ${message.message} </p> <span class='blueText'>Posted on: ${message.time.slice(0, 10) } <span class='spacial'> at: ${message.time.slice(11, 19) }</span> </span>`);
Метка времени работала нормально, без каких-либо других прямых изменений в приведенной выше строке кода, она перестала работать или работает толькопосле обновления страницы.Консоль регистрирует «сообщение сохранено», но я в клиентском терминале получаю Uncaught TypeError: Невозможно прочитать свойство «slice» из неопределенного.Но это только одна из проблем, а не единственная.
Моя цель - отображать сообщение всякий раз, когда пользователь присоединяется к чату или покидает его.
То, что у меня есть, это простоserver.js и файл index.html.
Вот соответствующий IO JS из файла server.js:
io.on('connection', (socket) =>{
console.log('a user is connected', socket.id); // works
socket.emit('newEntry', { userID: socket.id, // works and is displayed on the front end and console
description: 'Has joined the chat room!'
});
setTimeout(function() { // works
socket.emit('testerEvent', { description: 'A custom event named
testerEvent!'});
}, 4000);
socket.on('clientEvent', function(data) { // works
console.log(data);
// here the troubles start
socket.on('disconnect', function(){
console.log('user disconnected', socket.id); // this works
socket.emit('leaving', { userID: socket.id, // this does not work, is logged on sevrer console, but nothing on client, no error
description: 'Has left the chat room!'
});
});
})
});
Соответствующий код в index.html:
var socket = io(); // init
socket.emit('clientEvent', 'Sent an event from the client!'); // works
$(() => { // works
$("#send").click(()=>{
sendMessage({name: $("#name").val(), message:
$("#message").val()});
})
getMessages();
})
socket.on('message', addMessages)
socket.on('testerEvent', function(data){ // works
console.log(data);
$("#textdiv").append(` <li class='blueText'> ${data.description} </li> `);
});
// this does not work, its looged on the server side console but nothing happens on client
socket.on('leaving', function(data){
console.log(data);
$("#textdiv").append(` <li class='greenText'> User ${data.userID}
${data.description} </li> `);
});
//the following does work, it should append the text to the last message but I can sort that out later.
socket.on('newEntry', function(data){
console.log(data);
$("#textdiv").append(` <li class='blueText'> User ${data.userID}
${data.description} </li> `);
});
Так почему у меня не работает сообщение о выходе, похоже, что все, что я делаю в socket.on ('отключение', функция () {part не работает.
И как яКак я могу это изменить, получая эту ранее упомянутую ошибку, когда я пытаюсь использовать слайс, когда получаю отметку времени от следующей модели? Я просто хочу, чтобы отображался чат », опубликованной в [date] в [time].
На сервере, js, модель определена:
var Message = mongoose.model('Message',{
name : String,
message : String,
time : { type : Date, default: Date.now }
})
И последнее: как я могу очистить консоль, когда я перезагружаю браузер на localhost 3000, все старые сообщения отображаются и перерисовываются, даже в новых вкладках, как я могу это остановить, это очень тедиПодождать загрузки всех предыдущих сообщений, особенно с кодом, склонным к ошибкам, таким как мой (извините, я новичок в работе на стороне сервера, но мне это нравится: -)).
Репозиторий github: https://github.com/dampopgit/nodejsChat
код меньше, чем кажется, вся помощь приветствуется.
Localhost3000 и точка входа nodemon ./server.js
Я знаю, что это полторавопрос, но я в основном хочу знать, что я делаю неправильно в socket.on ('отключить', функция () {} часть в server.js.
следующее будет, как мне назначить сгенерированныйИдентификатор имени пользователя, поэтому он говорит, что пользователь [имя пользователя] присоединился / покинул чат.Но обо всем по порядку.Спасибо, что заглянули.
Я также заметил, что каждое сообщение чата, кроме последнего, имеет одинаковую отметку времени, это плохо.Почему это происходит?Похоже, что отметка времени не должна быть сгенерирована из модели mongoDBs, верно?