【发布时间】:2020-11-18 12:51:43
【问题描述】:
“消息”套接字无法发送到前端。我认为问题源于我的服务器代码,特别是这个块:
socket.to(data.roomId).emit('message', {
from: data.from,
body: data.body,
timestamp: data.timestamp
});
当我将上面的内容更改为socket.emit('message') 时,会在前端接收并呈现消息。但是,因为不是针对特定的 roomId,所以没有即时聊天功能。我知道 data.roomId 是在正确范围内使用 console.log 的正确 roomId。
服务器 API
io.sockets.on('connection', function (socket) {
//meant to join the socket to the roomId so that messages can be emmitted to the roomId
socket.on('join', function (data) {
socket.join(data.roomid, () => {
console.log(data.roomid);
});
});
//my Conversation schema holds Message Schemas
socket.on('connected', function (data) {
//loads all messages already created
const filter = { roomId: data.roomid };
(async () => {
console.log('searching for Schema');
let conversation = await Conversation.findOne(filter)
.populate('messages')
.exec(function (err, message) {
if (message) {
const array = message.messages;
console.log(array);
socket.emit('send', { arra: array }); //sends previous conversation
} else {
console.log('Schema not found');
}
});
})();
});
socket.on('server:message', (data) => {
const filter = { roomId: data.roomId };
const message = new Message({
from: data.from,
body: data.body,
timestamp: data.timestamp
});
(async () => {
console.log('searching for Schema');
let conversation = await Conversation.findOneAndUpdate(filter, {
$push: { messages: message }
});
if (conversation == null) {
console.log('Schema being created');
(await Conversation.create(filter)).populate('messages');
message.save(function (err) {
if (err) console.log('an error has occured saving the message');
// saved!
});
await Conversation.findOneAndUpdate(filter, {
$push: { messages: message }
});
let updatedConversation = await Conversation.findOne(filter);
} else {
console.log('Schema found');
let updatedConversation = await Conversation.findOne(filter);
message.save(function (err) {
if (err) return handleError(err);
// saved!
});
}
})();
//this socket is not working
socket.to(data.roomId).emit('message', {
from: data.from,
body: data.body,
timestamp: data.timestamp
});
});
});
前端
//this socket is not receiving anything
ioClient.on('message', (msg) => {
console.log(msg); //this is not printing anything
if (isMount) {
setMessages((previousMessages) => [
...previousMessages,
toChatMessage(msg)
]);
}
});
【问题讨论】: