inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

emit 관련 질문 드립니다

해결된 질문

175

supp0rtyoo

작성한 질문수 1

0

채팅 기능 구현 중에 해결이 안되는 문제가 있어서 질문 드립니다.

Router 내에서 req.app.get('io').of('/chat').to(chatting_id).emit('chat', message) 방식으로 소켓에 데이터를 전달할 경우 해당 chatting_id 소켓에 연결되어있는 클라이언트들에게 메세지가 전달되지 않습니다.

 

socket.js 안의 on에서 동일하게 chatting_id를 통해서 emit할경우 수신/발신 모두 정상적으로 진행됩니다.. chatting_id 값은 숫자 1로 동일합니다.

 

콘솔에 req.app.get('io').of('/chat') 까지는 객체가 잘 들어있는것을 확인했습니다.. 강의 내부에서 동작하는것과 똑같이 작성한것같은데 원인이 무엇일까요..?

 

라우터 파일(별도 파일로 작성 후 router.js에서 사용)

exports.createChattingContents = async (req, res, next) => {
    const chattingContents = req.body.chatting_contents;
    const chat = req.app.get('io').of('/chatting');

    try {
        const createdResult = await ChattingContentsRepository.create(chattingContents);

        chat.to(createdResult.chatting_id).emit('chat', createdResult);
       
        res.status(200).send({
            ok: true,
            data: createdResult,
        });
    } catch (error) {
        next(error);
    }
};
 
 
Socket의 chat 부분
 
socket.on('chat', (data) => {
  const chattingContents = data;
 
  socket.to(chattingId).emit('chat', data);
});

Sequelize mysql nodejs mongodb

답변 2

0

supp0rtyoo

아 네네 

 

const io = SocketIO(server, { path: '/socket.io'});
    app.set('io', io);
    const chat = io.of('/chatting');
 
이렇게 선언해뒀습니다

0

제로초(조현영)

프론트쪽도 chatting이 맞나요?

0

supp0rtyoo

postman으로 테스트 진행하고있는데 chatting쪽에 응답이 없습니다

socket 안에서는 오는데 router에서 진행할때는 안와요..

0

제로초(조현영)

아뇨 프론트 소켓 코드에서 네임스페이스도 chatting으로 하신게 맞냐고 질문한겁니다.

0

supp0rtyoo

const io = SocketIO(server, { path: '/socket.io'});
    app.set('io', io);
    const chat = io.of('/chatting');
 
네 네임스페이스도 이렇게 선언했습니다

0

제로초(조현영)

아뇨 여기는 프론트가 아닙니다. ㅠㅠ 여기는 서버에요. 저기는 네임스페이스 선언하는 부분이 아닙니다. 프론트랑 서버랑 둘 다 네임스페이스가 chatting이어야하는데 서버만 그런 것 같습니다.

0

supp0rtyoo

아 프론트요.. 프론트는 포스트맨에서 접속했고,, 주소는 http://localhost:80/chatting

eventlistner로 chat 으로 선언해서 구성했습니다.

router를 이용하지 않고 소켓 내에서 event name chat으로 진행하면 연결된 유저들 사이에서 수/발신 정상적으로 진행됩니다.. 근데 router 내에서 emit 할때만 해당 메세지가 전달이 안되네요..

라우터는

router.post('/', ChattingContentsService.createChattingContents);

이렇게 구성되어있습니다.

0

supp0rtyoo

postman에서 메세지 수신하면 이렇게 노출됩니다

0

제로초(조현영)

뭔가 포스트맨이랑 브라우저랑 웹소켓 연결이 다른 것 같은데요. 브라우저로는 해보셨나요?

0

supp0rtyoo

아뇨 저는 프론트를 따로 만들지 않아서,, 브라우저로 확인은 못해봤네요..

테스트용으로라도 프론트를 따로 만들어서 진행해보는게 좋을까요?

소스 단에서 제가 열심히 본다곤 했는데 별개로 이슈는 없겠죠..?

0

제로초(조현영)

아니면 포스트맨 접속 프로토콜을 ws://localhost:80/chatting으로 해보세요.

강좌와 다른 부분이라 어떤 부분이 다른지 확인이 안 되네요.

0

supp0rtyoo

네 말씀해주신대로 확인해보겠습니다

감사합니다!

0

supp0rtyoo

해결을 했는데 혹시 다른분들도 비슷한 증상으로 고생하실까봐 댓글 남깁니다.

chatting_id로 소켓 분리 시 한곳은 '1', 한곳은 1로 지정되어서 송수신이 원활히 진행되지 않았었던것으로 확인했습니다. 타입이 없으니 이런 오류도 발생하네요..ㅎㅎ

0

제로초(조현영)

of /chatting으로 되어있는데 일부러 바꾸신건가요?

리눅스 노드 설치시 패키지

0

172

0

socket.js 에서 referer로부터 roomId를 가져올 때

0

931

3

스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문

0

2297

2

a[title] 질문드립니다

0

387

1

리뉴얼 강의 및 공부 방법

0

590

1

jwt decode

0

1138

1

node.js 교과서 3판 질문드립니다

0

398

1

passport와 jwt

0

439

1

리뉴얼 강의

0

428

2

혹시 Node.js 교과서 3판 이북은 언제 나오나요?

0

359

1

몽고디비 사용자도 MYSQL부분을 들어야 하나요???

0

490

1

sql 쿼리 로그는 어떤 모듈이 작성하나요?

0

511

2

nunjucks res.render('error'); 작동을 안합니다.

0

520

1

질문있습니다.

0

349

1

multer 한글 파일 업로드시 파일명이 깨져요.

1

3545

1

수업자료는 어디있나요?

0

374

1

질문 있습니디

0

245

1

multer 사용시 file 외 name값은 못받나용?

0

430

1

코드 중복 부분 질문드립니다.

0

303

1

api 만드는 이유 질문드립니다.

0

293

1

Strategy의 done에 대해 질문드립니다.

0

374

1

안녕하세요 fs 권한 관련 질문드립니다

0

456

1

시퀄라이즈 연결질문...

0

511

2

res.setHeader vs res.cookie

0

1799

3