【问题标题】:SocketIO emit won't fire inside express routeSocketIO 发射不会在快速路线内触发
【发布时间】:2017-11-23 21:46:57
【问题描述】:

以下工作正常,我可以在我的客户端应用程序上获得 http 响应,但 socketio 发出似乎不起作用。我不知道为什么它没有触发。

这是我的代码(删除了一些部分):

app.js

var express = require('express');
var port = process.env.PORT || 3000;
var socketio = require('socket.io');
var app = express();
var server = require('http').Server(app);
var io = socketio(server);

var beacons = require('./routes/beacons')(io);
app.use('/beacons', beacons);

server.listen(port, () => {
 console.log('Listening on port '+port);
});

io.on('connection', (socket) => {
  socket.on('beacon:show', function(data) {
    console.log('Show beacon: ' + data)
    socket.broadcast.emit('beacon:draw', data)
 })
});

module.exports = app;

beacons.js

var express = require('express');
var router = express.Router();

module.exports = function(io) {
 router.get('/buy', function(req, res) {
    io.emit('beacon:show', {data: someData}) // Not Firing
    res.json({success: true})
 })

 return router
}

【问题讨论】:

  • 你有什么错误信息吗?

标签: node.js express socket.io


【解决方案1】:

您需要将io.emit() 包裹在io.on('connection', => {}) 中。

目前,您只发送io 变量,但每个请求和发射都需要包装在连接事件中。否则 socket.io 怎么知道它发送给谁,或者是否有任何人to 发送它?

这实际上只能在 beacons.jsrouter.get('/buy') 部分内完成,因为反过来(包裹在连接内的路由)将不起作用。

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多