그저 내가 되었고

🌟socket.io:: 실시간 채팅 백엔드 코드 뜯어보기(0) 본문

개발/socket.io

🌟socket.io:: 실시간 채팅 백엔드 코드 뜯어보기(0)

hyuunii 2022. 12. 8. 23:43

socket.js

const SocketIO = require("socket.io");
// 몽구스 연결
const connect = require("./schema");
connect();
const Room = require("./schema/room");
const Posts = require("./schema/posts");
const Users = require("./schema/users");

module.exports = (server) => {
  // path 설정 하지 말기
  const io = SocketIO(server, {
    cors: {
      origin: "*",
    },
  });

  io.on("connection", socket => {
    socket.on("joinRoom", async data => {
      let {nickName, room, userAvatar} = data
      socket.join(room)
      const findRoom = await Room.findOne({ room: room });
      if(!findRoom) {
        console.log("신규")
        await Room.create({owner : nickName, room : room, member: nickName})
        await Room.updateOne({ room : room }, {$push: {avatar : {nickName : nickName, userAvatar :userAvatar}}})  //❓
        // const user = await Users.findOne({nickName : nickName}) 
        io.to(room).emit("roomUsers", [{nickName : nickName, userAvatar : userAvatar}])
      } else {
        console.log("추가")
        console.log(findRoom.member)
        if(!findRoom.member.includes(nickName)) {
          await Room.updateOne({ room : room }, {$push: {member : nickName}})  //includes 사용할 수 있도록
          await Room.updateOne({ room : room }, {$push: {avatar : {nickName : nickName, userAvatar :userAvatar}}})  //프에 보냄
        } 
        const RoomM = await Room.findOne({room : room})
        // const user = await Users.findOne({nickName : nickName}) 
        io.to(room).emit("roomUsers", RoomM.avatar)
      }
      socket.broadcast.to(room).emit('notice', `${nickName}님이 채팅방에 입장하셨습니다.`)
    })

❓부분::

1. 원래는 member쪽에다가 avatar를 같이 넣으려고 함

2. 근데 이게 db상으로는 들어가지만 배열 안에 객체가 존재하는 형태라 includes를 쓸 수 없음

 

 

여기서 

윗줄: includes를 사용하게끔 만든 부분

아랫줄: 프론트로 보내주기 위해 avatar라는 schema를 하나 더 만들어서 거기에 넣고

 

 

여기서 프론트로 그걸 보내줌