套接字IO - socket.emit每次触发两次事件

时间:2018-03-06 16:38:53

标签: node.js socket.io

socket.js:

var state = {
  io: null
}

exports.init = function(io) {
  state.io = io;
}

exports.get = function() {
  return state.io;
}

exports.emit = function(message, data) {
  console.log("emitting")
  state.io.emit(message, data);
}


exports.onConnection = function(callback) {
  state.io.once('connection', function (socket) {
    callback(socket);
  });
}

tags.js:

router.get('/', function (req, res) {
    var DeviceIdentifier = 'WILL'
    var NDefRecord = 'FROM_WILL'
    req.headers['x-name'] = DeviceIdentifier
    req.headers['x-content'] = NDefRecord

    console.log("tags.js: GET");

    socket.emit("tag:scan", {name: "000000000a0d9439", content: "adsf});


})

server.js

var io = require('socket.io')(server);

var socket = require('./socket');
socket.init(io);

socket.onConnection(function (data) {
  console.log("Got Connection");
  console.log(data);
});

无论我怎么做,都会调用socket.emit函数两次,并且数据也会被存储两次。

我试过查找很多例子,问题似乎仍然存在

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

只需添加res.send即可。您没有向浏览器发送任何响应,因此他尝试在x秒后刷新

router.get('/', function (req, res) {
    var DeviceIdentifier = 'WILL'
    var NDefRecord = 'FROM_WILL'
    req.headers['x-name'] = DeviceIdentifier
    req.headers['x-content'] = NDefRecord

    console.log("tags.js: GET");

    socket.emit("tag:scan", {name: "000000000a0d9439", content: "adsf});
    res.send('ok');

})