2017-12-19 2 views
0

Express와 소켓 연결을 함께 연결하려고합니다. 나는 내가이 설정을 깔끔하게하고 있다고 생각하지만, 이것을하고 싶지는 않다.Express 및 NodeJS 내보내기와 함께 Socket.IO 사용

  1. 사용자가 새로운 방을 만든다. 백엔드 Express 서버에 대한 POST.
  2. app.post()은 모든 데이터베이스 연결을 처리하는 내보내기로 입력을 보냅니다.
  3. 데이터베이스에 저장되면 소켓을 통해 모든 사람에게 새로운 회의실이 추가되었습니다.

소켓에서만 수행 할 수 있습니까? 예. 그러나 나는 그 삶에 관한 것이 아닙니다.

RoomRouter.js

exports.createRoom = (req, response) => { 
    new Room(req.body).save((err, room) => { 
     response.status(200).send(room); 
    }); 
}; 

/* 
* Express setup is left out, because we don't need to focus on that. 
* "app" is const app = express(); 
*/ 
const RoomRouter = require("./RoomRouter"); 

app.post("/room/create", RoomRouter.createRoom); 

io.on("connection", (socket) => { 
    //I want to broadcast the room to everyone 
    //io.emit("newRoom", room); 
}); 

익스프레스 부분은 잘 작동하고 POST 작동 app.js. 자, 어떻게 Socket.IO에 연결하면, 모든 사람들에게 새로운 방이 추가되었다는 것을 알릴 수 있습니까?

답변

1

난 당신이 정말 원하는 것을 잘 모르겠지만, 당신은 당신의 경로에 소켓 IO를 사용하려는 경우, 당신은 다음과 같은 경로를 선언 할 수 있다고 생각 :

RoomRouter.js

그리고 당신의

exports.createRoom = (io) => { return (req, response) => { new Room(req.body).save((err, room) => { io.emit("newRoom", room); response.status(200).send(room); }); }; }; 

app.post("/room/create", RoomRouter.createRoom(io)); 

는 희망이 도움이 app.js.

+0

흠. 내가 원하는 것은 아닙니다. 'createRoom'은 이미'req, response'를 매개 변수로 취합니다. – MortenMoulder

+0

네,하지만이 방법을 사용하면'io'를 매개 변수로 취한 다음 경로에서 직접'newRoom'을 출력 할 수 있습니다 :) – Sparw

+0

오, 그래요. 모든 메소드에'io'를 파싱하는 대신, 어떻게 든 그것을 포함시키는 것이 낫지 않습니까? 어디 에나 포함될 수있는 서비스를 만드는 것처럼? – MortenMoulder