inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js 교과서 - 기본부터 프로젝트 실습까지

스스로 해보기2(시스템 메시지 디비 저장)

질문이요

133

D_One

작성한 질문수 92

0

script(src='/socket.io/socket.io.js')
script.
var socket = io.connect('http://localhost:8005/room', {
path: '/socket.io'
});

main.pug 에서 이거 용도좀 알려주실수있나요? 

대충 socket.io를 커넥할때쓰는거 같은데, 

1.

지금이게 발생하면, socket.js 에서 무슨일이 벌어지는지 좀 자세히 알려주실수 있나요??

 

2.

방생성 라우터에서 

const io = req.app.get('io');

이 부분 정확히 이해가 안가네요?

req는 room.pug에서 submit되는 순간, 이 라우터에 걸리는거로 아는데,

req. 즉 room.pug가 어떻게 app.get('io')로 요구할 수 있는지 궁금하네요?

그리고 왜 필요한지도 궁금하네요? 

 

3. 

const io = req.app.get('io');
io.of('/room').emit('newRoom', newRoom); // newRoom 이벤트 발생

이거요, io.of('/room') 이 네임스페이스를 뜻하는거 잖아요.

그러고, emit을 통해서, 'newRoom'이라는 이름의 이벤트를 발생시키고, newRoom 이라는 데이터값을 주는걸로 알고 있는데요. 

저는 newRoom 이벤트가, soket.js 에서만, 존재하는줄 알았어요, 왜냐면 네임스페이스로 쓰였기 때문예요. 

근데 실상은, main.pug 에서 이벤트 대기했다가 발생하게 되있더라구요

여기서 질문이요, 그러면, 아무 pug에서 newRoom 이라는 이벤트가 3 개 정도 동시에 쓰여있다고하면은, 

이 3개의 이벤트가 동시에 일어나나요?

 

4. 

router.post('/room', async (req, res, next) => {
try {
const room = new Room({
title: req.body.title,
max: req.body.max,
owner: req.session.color,
password: req.body.password,
});

const newRoom = await room.save();
const io = req.app.get('io');
io.of('/room').emit('newRoom', newRoom);
res.redirect(`/room/${newRoom._id}?password=${req.body.password}`); // 방에 접속하는 라우터
} catch (error) {
console.error(error);
next(error);
}
});
 

여기서 질문이 있는데요 

console.log(newRoom._password) // undefine
console.log(newRoom.password) // 값나옴
console.log(newRoom._id) // 값나옴
console.log(newRoom.id) // 값나옴

 

 

제가 기억하기로, 몽고디비에서, 값을 부르려면 ._ 이거는 해야한다고 들었는데요.

여기서, newRoom._password 하면 undefine 나오네요...

console.log(newRoom) 을 찍어보면, 

{

max: 10,
 
_id: 5d649d93a0c2c01ace5ab98e,
 
title: 'aaaa',
 
owner: '#c5879a',
 
password: '123',
 
createAt: 2019-08-27T03:03:47.611Z,
 
__v: 0
 
}

이런식으로 DB가 저장되 있는걸 확인할수 있는데요 

자동 생성이 되면 _ 이게 붙는 건가요?? 

즉 자동생성된거만 ._ 이런식으로 접근하는건가요?? 

mysql nodejs mongodb javascript

답변 1

0

제로초(조현영)

1. 저 코드는 그냥 서버 웹소켓 주소를 지정한거지 다른 일을 하진 않습니다. emit 해야 저 주소로 데이터를 보냅니다.

 

2. app.set('io', io) 했던 부분을 라우터에서 req.app.get('io') 이렇게 가져오는 것입니다. 라우터에서 소켓으로 데이터를 emit하고 싶을 때 사용합니다.

 

3. 네 동시에 일어납니다. 네임스페이스는 단지 이벤트가 모두에게 일어나는 걸 막기 위해서 쓰는 겁니다. 특정 네임스페이스를 구독한(on) 사용자에게만 이벤트를 발생시킬 수 있습니다.

 

4. _id 빼고는 _ 붙지 않습니다. 자동생성된 것과 상관 없습니다.

실제 서비스에서도 cluster를 사용하나요?

1

314

2

캐싱에 관하여

0

279

3

salt를 실무에서 사용할때 항상 randomBytes로 만들어줘야 하나요?

0

347

1

게시물 올리기 오류

0

408

1

캐슁 이후 로그인창

0

266

1

kakao passport 질문있습니다.

0

493

3

global객체 공유 질문드립니다.

1

418

1

서버가 죽어버리네요

0

1047

8

포링키 문제..

0

235

2

커넥션 플래시 설치문제

0

216

2

익스프레스 제너레이터? 설치문제

0

2586

6

redis 질문입니다.

0

305

1

9장 세션을 DB에 저장시 리다이렉션 오류 발생

0

874

8

프레임워크 선택에 관하여 질문이 있습니다.

0

300

3

시퀄라이즈 질문입니다 ! !

0

588

1

리뉴얼 강의 12강 socket.io에서 req.session접근 관련 질문

0

922

6

oAuth 질문입니다.

0

356

3

GCP 질문입니다.

0

366

1

Passport 모듈 로그인 구현관련

0

720

6

카카오 로그인 관련 질문입니다!!

0

606

4

스스로 해보기 10-16 nunjuncks 질문있습니다

0

499

5

제로초님 HTTP 완벽가이드 추천해주신거 너무 잘 읽었습니다.

0

317

2

gif채팅방 nunjucks관련 질문입니다!

0

338

3

현영님 몽고db관련 질문입니다.

0

233

3