Entweder habe ich ein grundlegendes Missverständnis, wie socket.io funktioniert (sehr wahrscheinlich), oder ich finde nur einige Fehler, die niemand kennt (fast unmöglich).Socket.io mit Express, emittieren nicht funktioniert in Express-Route
Ich habe versucht, Express mit socket.io zu integrieren. Auf der Client-Seite funktioniert alles gut: Der Benutzer klickt auf die Schaltfläche, das Ereignis wird ausgegeben, alle sind zufrieden.
Nehmen wir an, ich möchte dieses Ereignis innerhalb einer Expressroute ausgeben, bevor eine Seite gerendert wird. Das Ereignis scheint nie ausgestrahlt zu werden. Aus all den Fragen, die ich mir angeschaut habe, soll ich meine "io" -Instanz einfach in meine App einstecken und dann über meine Routen darauf zugreifen können.
Das ist also mein Setup ...
// index.js
var app = express();
var port = process.env.PORT || 3700
var io = require('socket.io').listen(app.listen(port));
io.on('connection', function (socket) {
console.log("Socket connected on port " + port)
socket.on('send', function (data) {
console.log("WAFFLES")
});
});
console.log('The magic happens on port ' + port);
require('./app/routes.js')(app, io);
// app/routes.js
module.exports = function(app, io){
app.get('/', function(req, res){
io.on('connection', function (socket) {
console.log("Hello from the route!")
socket.emit('send', {message: 'urdum'})
});
res.render('index')
})
}
So in diesem Fall möchte ich in der Lage sein, in die/route zu gehen, siehe "Hallo von der Route" und dann "WAFFLES", die nach dem Auslösen des "send" -Ereignisses in der Konsole protokolliert wurden. Stattdessen bekomme ich absolut nichts.
Ich habe versucht, "io" über app.set ('socketio', io) zu übergeben. Aber egal was, nichts funktioniert.
ich die Veranstaltung auch versucht haben, ohne die io.on innerhalb der Route emittierenden ('Verbindung') und einfach nur tun,
io.emit('send' ...)
ODER
io.sockets.emit('send' ...)