실시간 채팅을 위해 socket.io를 이용하였다.
const io = SocketIO(server, {
cors: {
origin: "*",
},
allowEIO3: true,
requestCert: true,
secure: true,
rejectUnauthorized: false,
transports: ["websocket"],
});
const chat = io.of("/");
socket.on("message", (messageInfo) => {
createChat(messageInfo);
const {roomNum} = socket;
socket.to(roomNum).emit("message", messageInfo);
});
const {roomNum} = socket;
초기 유저가 방에 입장하면 프론트에서 소켓 오브젝트에 방 번호를 넣었기에 socket.roomNum이 사용 가능하다.
const createChats = async (data) => {
const objData = JSON.parse(data);
const {user, message, roomNum} = objData;
const room = await ChatsRoom.findOne({roomNum});
const dbChat = await Chat.create({
chatRoom: room._id,
message,
user,
});
room.chats.push(dbChat._id);
room.save();
};
지극히 단순한 mongoose 로직이다.