• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

질문이요

19.08.27 11:15 작성 조회수 74

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가 저장되 있는걸 확인할수 있는데요 

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

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

답변 1

답변을 작성해보세요.

0

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

 

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

 

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

 

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