해결된 질문
작성
·
202
0
12장 웹소켓 채팅을 구현중인데
req.session.color를 못찾는다고 나옵니다. node 버전은 v14.15.4이구요
TypeError: cannot read property 'color' of undefined 가 나옵니다.
강의처럼 {} 처리도 해보았는데 도 안되네요 문제가 되는 소스 첨부리며
위에 부분에서 오류가 발생합니다.
const SocketIO = require('socket.io');
const axios = require('axios');
const cookieParser = require('cookie-parser');
const cookie = require('cookie-signature');
module.exports = (server, app, sessionMiddleware) => {
const io = SocketIO(server, { path: '/socket.io' });
app.set('io', io);
const room = io.of('/room');
const chat = io.of('/chat');
io.use((socket, next) => {
cookieParser(process.env.COOKIE_SECRET)(socket.request, socket.request.res || {}, next);
sessionMiddleware(socket.request, socket.request.res || {}, next);
});
room.on('connection', (socket) => {
console.log('room 네임스페이스에 접속');
socket.on('disconnect', () => {
console.log('room 네임스페이스 접속 해제');
});
});
chat.on('connection', (socket) => {
console.log('chat 네임스페이스 접속');
const req = socket.request;
const { headers : { referer } } = req;
const roomId = referer
.split('/')[referer.split('/').length-1]
.replace(/\?.+/, '');
socket.join(roomId);
socket.to(roomId).emit('join', {
user: 'system',
chat: `${req.session.color}님이 입장하셨습니다.`,
});
socket.on('disconnect', () => {
console.log('chat 네임스페이스 접속 해제');
socket.leave(roomId);
const currentRoom = socket.adapter.rooms[roomId];
const userCount = currentRoom ? currentRoom.length : 0;
if (userCount === 0) { // 접속자 수가 0명이면 방 삭제
const signedCookie = req.signedCookies['connect.sid'];
const connectSID = cookies.sign(signedCookie, process.env.COOKIE_SECRET);
axios.delete(`http://localhost:8005/room/${roomId}`, {
headers: {
Cookie: `connect.sid=s%3A${connectSID}`,
},
})
.then(() => {
console.log('방 제거 요청 성공');
})
.catch((error) => {
console.error(error);
});
} else {
socket.to(roomId).emit('exit', {
user: 'system',
chat: `${req.session.color}님이 퇴장하셨습니다.`,
});
}
});
});
};