要麼我對socket.io的工作原理有一個基本的誤解(很有可能),或者我只是發現了一些沒人知道的錯誤(幾乎不可能)。帶有Express的Socket.io,在快速路由中不能工作
我一直在嘗試將express與socket.io集成。在客戶端,一切工作正常:用戶點擊按鈕,事件發出,大家都很開心。
但是,假設我想在渲染頁面之前從快速路徑中發出此事件。事件似乎從未被髮射。從我看過的所有問題中,我應該能夠簡單地將我的「io」實例插入到我的應用程序中,然後從我的路線中訪問它。
所以這是我的設置...
// 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);
//應用程序/ 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')
})
}
在這種情況下
所以,我想能夠進入/路由,發出「發送」事件後,請參閱「路由中的Hello」和「WAFFLES」登錄到控制檯。相反,我一無所獲。
我試過通過app.set('socketio',io)傳入「io」。但無論如何,沒有任何工作。
我也嘗試發射路徑內的事件,而不io.on( '連接'),並簡單地只是做
io.emit('send' ...)
OR
io.sockets.emit('send' ...)