inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

질문입니다.

해결된 질문

166

Jack

작성한 질문수 11

1

안녕하세요. 제로초님

1. 

 @ApiOperation({ summary: '워크스페이스 특정 채널 가져오기' })
  @Get(':url/channels/:name')
  async getWorkspaceChannel(@Param('url'url, @Param('name'name) {
    return this.channelsService.getWorkspaceChannel(urlname);
 }

 async getWorkspaceChannel(urlstringchannelIdnumber) {
    Logger.log('---------------------------------------');
    console.log('channelId:::'channelId);
    return this.channelsRepository.findOne({
      where: {
        // workspaceId: id,
        id: channelId,
      },
    });
 }

특정워크스페이스 채널 가져오기에서 url과 name을 넘겨주잖아요?  getworkspaceChannel에서 url은 안쓰여지고 channelId는 channel name ("일반")형태로 넘어오더라구요?  그래서 결과값을 보면 undefiend가 나옵니다.

channelId면 숫자형태로 와야하는거 아닌가요? 컨트롤러와 서비스에서 받는 인자 값이 다르게 설정되어 있는데 이건 왜 그런지 궁금합니다!

2.


  @SubscribeMessage('login')
  handleLogin(
    @MessageBody() data: { idnumberchannelsnumber[] },
    @ConnectedSocket() socketSocket,
  ) {
    const newNamespace = socket.nsp;
    onlineMap[socket.nsp.name][socket.id] = data.id;
  
    newNamespace.emit('onlineList'Object.values(onlineMap[socket.nsp.name]));
    data.channels.forEach((channel=> {
     
      socket.join(`${socket.nsp.name}-${channel}`);
    });
 }

슬랙 강의 프론트랑 백엔드 다 수강하고 있는데요! 

socket.join(`${socket.nsp.name}-${channel}`);

이부분을 잘 모르겠습니다 이것을 콘솔로 찍으면

/ws-sleact 1

/ws-sleact 17

이러한 형태로 나오는데  이코드로 join한다고 해서 자동으로 조인되는건 아닌것 같고 프론트나 어디서 연결을 해줘야 조인이 되잖아요?.  프론트의 hooks폴더의 userSoket에서 연결이되어 조인 되는것인가요?...

if (!sockets[workspace]) {
    sockets[workspace] = io.connect(`${backUrl}/ws-${workspace}`, {
      transports: ['websocket'],
    });
 }

어떤 설정을 해주어서

socket.join(`${socket.nsp.name}-${channel}`);

이부분이 join이 되는지 궁금합니다...

3.

  handleConnection(@ConnectedSocket() socketSocket) {
   
    if (!onlineMap[socket.nsp.name]) {
      onlineMap[socket.nsp.name] = {};
    }
    // broadcast to all clients in the given sub-namespace
    socket.emit('hello'socket.nsp.name);
 }

여기서 emit할때 hello 이벤트가 있는데 프론트에서 hello로 이벤트를 받는 곳은 없더라구요?

어디에 쓰이는지 궁금합니다.

4. 

createWorkspaceDMChats 에서

 const receiverSocketId =  getKeyByValue(
      onlineMap[`/ws-${workspace.url}`],
      Number(id),
   );

receiverSocketId 을 콘솔로 찍어봐도 undefined라고 뜨는데 이건 무슨 값일까요 왜 undefined가 뜨는지 궁금합니다!

express nodejs TypeORM NestJS

답변 1

0

제로초(조현영)

1. param 인자는 무조건  string입니다. number로 바꾸려면 parseInt나 parseIntPipe같은걸로 변경하셔야하고요. getWorkspaceChannel는 service 부분이 잘못돼서 수정했습니다(강의에서는 안 쓰이는 컨트롤러입니다)

2. 프론트 훅스에서 io.connect로 워크스페이스(네임스페이스로 전달됨) 이름을 서버로 보내면 서버에서도 프론트에서 요청한 네임스페이스 이름인 ws-???-채널 방에 입장하게 한 것입니다. 프론트는 네임스페이스 이름으로 어디 워크스페이스에 입장할건지 알릴 뿐입니다.

3. 이건 프론트랑 연결 테스트할 때 쓰시면 됩니다. 프론트에서 on('hello', 콜백) 해보세요.

4. join이 제대로 안 돼서, 또는 onlineMap에 제대로 저장이 안 돼서 문제가 생긴 것 같습니다. undefined가 되면 안 됩니다.

강의자료는 어디서 다운받나요?

0

141

4

질문 있습니다.

0

315

3

코드 편집기 확장 프로그램

0

220

2

(질문)비밀 저장소에 접근하기 위한 인증 정보는 로컬 .env에 저장하는지?

0

161

2

(질문)외부 저장소를 통한 환경변수 불러오기 비동기 질문

0

177

3

로그인을 해도 LoggedInGuard쪽에서 false값이 나옵니다.

0

161

2

로그인방법이 고민됩니다.

0

197

2

yarn seed 명령어 실행 시 데이터 삽입 안됨

0

305

4

yarn run db:create 시에 발생하는 데코레이터 오류

0

247

2

npm run db:create 시에 발생하는 decorating 오류

0

245

2

RxJS 디버깅 질문 있습니다.

0

198

3

CacheManager에 대해 질문 있습니다.

0

184

2

로깅은 어떻게 하는게 효율적일까요?

0

237

1

CORS 질문 있습니다.

0

425

2

쿠키 옵션에 대해서 질문 있습니다.

0

188

2

로그아웃 요청이 403 forbidden 에러가 나는데 왜그런걸까요??

0

458

1

401 unauthorized문제

0

304

1

가드의 장점에 대해서 질문이 있습니다.

0

232

1

로그 관리에 대해 질문 있습니다.

0

254

2

CORS 에러 질문 있습니다.

0

328

2

배포 환경 DB 연결 질문 있습니다.

0

417

2

socket io 미 연결 문제 (nest & flutter)

1

1166

3

no elements in sequence 에러 관해서 질문이 있습니다.

0

462

1

start:dev-backup으로 돌리면 핫 리로딩이 되요 정상인가요?

0

324

1