FILOT 채팅앱 만들기 - 3 (Chatting)

원종서·2021년 9월 27일
0

chattingApp

목록 보기
3/4

Chatting

실시간 채팅을 위해 socket.io를 이용하였다.

  const io = SocketIO(server, {
        cors: {
            origin: "*",
        },
        allowEIO3: true,
        requestCert: true,
        secure: true,
        rejectUnauthorized: false,
        transports: ["websocket"],
    });
  • 프론트와 백의 url 다를 시 원활한 소통을 위한 옵션 추가.
const chat = io.of("/");
  • chat 네임 스페이스를 사용하여 채팅을 구현해 보고 싶었는데 생성된 방에 입장 시 메세지를 불러올때 장애를 잃으켜 네임스페이스를 뺐다. 메세지 불러오기 부분에서 설명하겠다.

메세지 BD 저장

  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 로직이다.

0개의 댓글