그저 내가 되었고
🌟socket.io:: 실시간 채팅 백엔드 코드 뜯어보기(0) 본문
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를 하나 더 만들어서 거기에 넣고
여기서 프론트로 그걸 보내줌
'개발 > socket.io' 카테고리의 다른 글
🌟socket.io:: 프로젝트 내에서 router로 분리하기(작성중) (0) | 2022.12.10 |
---|