2017-09-11 3 views
0

Okay. also versuche ich zu erreichen, socket.io in alle meine Express-Routen zu bekommen.Socket.io in Node.js Backend-Routen

ein Teil meines Codes:

var port = process.env.PORT || 3000;  // set our port 
var server = app.listen(port); 
var io = require('socket.io')(server); 
app.io = io; 
exports.io = io; 

dann nenne ich es wie folgt in andere Datei.

var app = require('../../server'); 
var io = app.io; 

function hijack(user,boatid) { 
    console.log("????"); 
    console.log(user); 
    app.io.sockets.emit("myevent",{ test: 22}); 
    var userid = user._id; 
console.log(user); 


} 

module.exports = { 

    hijack : hijack(app), 


}; 

Aber wie es scheint, Benutzerparameter innerhalb Hijack-Funktion nun von der App besetzt ist, und genau dann, wenn ich einen exstra Parameter hinzuzufügen, es nicht noch die Benutzerparameter wissen, wie in Berufung in der Hauptdatei durch die folgende:

var ships_model = require('./app/gamemodels/ship_model.js'); 

     ships_model.hijack(req.user, req.body.id).then(function (result) { 

       res.json(result); 
      }); 

Bitte beachten Sie: ich habe versucht, die IO wie folgt zu injizieren:

var ships_model = require('./app/gamemodels/ship_model.js')(io); 

sondern dass gerade produziert Fehler.

ein anderes Beispiel:

Ist es möglich, eine Buchse emittieren rufen innerhalb einiger Funktionen zu machen? Ich bin nur daran interessiert, Daten an die Client-Seite zu senden.

Oder wie Schieber serverseitig funktioniert, könnte das auch mit Buchse getan werden?

die Client-Anforderung ist als Server

var bankfactory = require(path.resolve('./modules/articles/server/factory/user_factory.js')); 


app.post('/api/bank', function (req, res) { 
bankfactory.bank_inn(req.user._id,amount).then(function (bankresult) { 
       res.json(bankresult); 
      }); 
}); 

bankfactory seitig folgt:

exports.bank_inn = bank_inn; 


    function bank_inn(playerid,amount) { 

if (playerid == 1) { 

} else { 

    // possible to make a emit call to the client here? 
//emit("newevent,datahere) 
} 

    } 

Hinweis zwei: ich in eventemiters schon gesucht, aber ohne Ergebnisse.

Also, wie kann ich erreichen, socket.emit innerhalb meiner Express-Routen aufzurufen?

Zusätzliche Strukturcode:

Hauptdatei:

var ships_model = require('./app/gamemodels/ship_model.js'); 

ships_model.createShipInterface(req.user._id).then(function (response) { 
      res.json(response); 
     }); 

ship_model Datei haben die folgende Struktur:

module.exports = { 
    getShips: getShips(), 
    createShipInterface : createShipInterface, 
    allowedLocationsShips : allowedLocationsShips, 
    startMissionInterface : startMissionInterface, 
    deligateShipMovements: deligateShipMovements, 
    upgradeBoat : upgradeBoat, 
    deletedBoats: deletedBoats, 
    hijackSession : hijackSession, 
    boats_to_hijack : boats_to_hijack, 
    avaliable_boats : avaliable_boats, 
    createHijackSession : createHijackSession, 
    public_hijack : public_hijack, 
    joinHijackSession : joinHijackSession, 
    leavehijack : leavehijack, 
    sendMessageToMembers : sendMessageToMembers, 
    KickMember : KickMember, 
    togglePublic : togglePublic, 
    getHangar : getHangar, 
    hijack : hijack(app), 
    getHangarSession: getHangarSession, 
    updateUserLocation : updateUserLocation, 

}; 
+0

Sie müssen den Socket-Verbindungsaufbau in separaten trennen jetzt gibt es viel des Codes in der gleichen Datei [JSbin] (http://jsbin.com/huyimuketi/edit?js,console) –

Antwort

0

Wie lautet Ihr Kommentar?

Also, wie kann ich erreichen, socket.emit innerhalb meiner Express-Routen aufzurufen?

In unserem Projekt haben wir einen Socket-Server und Express-Server erstellt. Somit sind sowohl Express-Server (Server-Socket) als auch Browser (Client-Socket) Clients des Socket-Servers.

Also, wenn Express-Server etwas an den Browser senden möchten, sendet es Daten an Socket-Server mit der Kennung des Browsers (Socket-Id oder andere eindeutige Kennung des Client-Socket), die wir senden möchten. Dann Socket-Server mit der Kennung senden Daten an den jeweiligen Browser.