req.session.color를 찾을수없다고 나오네요
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}님이 퇴장하셨습니다.`,
});
}
});
});
};
답변 2
0
io.use 부분이 바뀌었습니다.
socket.io 3버전을 쓰려면
https://github.com/ZeroCho/nodejs-book/issues/160
참고하세요.
리눅스 노드 설치시 패키지
0
159
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
905
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2281
2
a[title] 질문드립니다
0
375
1
리뉴얼 강의 및 공부 방법
0
581
1
jwt decode
0
1128
1
node.js 교과서 3판 질문드립니다
0
391
1
passport와 jwt
0
432
1
리뉴얼 강의
0
417
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
353
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
481
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
505
2
nunjucks res.render('error'); 작동을 안합니다.
0
511
1
질문있습니다.
0
346
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3535
1
수업자료는 어디있나요?
0
366
1
질문 있습니디
0
235
1
multer 사용시 file 외 name값은 못받나용?
0
416
1
코드 중복 부분 질문드립니다.
0
298
1
api 만드는 이유 질문드립니다.
0
286
1
Strategy의 done에 대해 질문드립니다.
0
361
1
안녕하세요 fs 권한 관련 질문드립니다
0
446
1
시퀄라이즈 연결질문...
0
492
2
res.setHeader vs res.cookie
0
1785
3





