2017-12-19 6 views
0

Ich versuche, meine Express-und Socket-Verbindung miteinander zu verbinden. Ich denke, ich habe dieses Setup ordentlich, aber nicht, wenn ich das tun möchte:Verwendung von Socket.IO zusammen mit Express und NodeJS exportiert

  1. Ein Benutzer erstellt einen neuen Raum. POST an den Back-End-Express-Server.
  2. Die app.post() sendet dann die Eingabe in eine Exporte, die alle Datenbankverbindung behandelt.
  3. Wenn es in der Datenbank gespeichert ist, wird über Sockets an alle Personen gesendet, dass ein neuer Raum hinzugefügt wurde.

Könnte dies ausschließlich mit Steckdosen geschehen? Ja. Aber ich bin nicht wegen dieses Lebens.

RoomRouter.js

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

app.js

/* 
* 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); 
}); 

Der Express Teil funktioniert gut und die POST funktioniert. Nun, wie verbinde ich Socket.IO damit, damit ich jedem mitteilen kann, dass ein neuer Raum hinzugefügt wurde?

Antwort

1

Ich bin mir nicht sicher, was Sie wirklich wollen, aber wenn Sie Buchse io in Ihrer Route verwenden möchten, ich glaube, Sie Ihre Route so zu erklären haben:

RoomRouter.js

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

Und in Ihrem app.js

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

Hoffe, es hilft.

+0

Hmm nicht ganz was ich will. 'createRoom' akzeptiert bereits' req, response' als Parameter. – MortenMoulder

+0

Ja, aber mit dieser Methode können Sie auch 'io' als Parameter verwenden und dann' newRoom' direkt auf Ihrer Route ausgeben :) – Sparw

+0

Oh ja, ich sehe das jetzt - Interessant. Anstatt "io" zu jeder Methode zu analysieren, wäre es nicht besser, sie stattdessen zu integrieren? Wie einen Dienst machen, der überall enthalten sein kann, vielleicht? – MortenMoulder