Javascript Socket.io changefeed刷新/重新加载时多次发射

Javascript Socket.io changefeed刷新/重新加载时多次发射,javascript,node.js,express,socket.io,rethinkdb,Javascript,Node.js,Express,Socket.io,Rethinkdb,我有一个确切的问题: 第一次连接时,it console.logs记录了1次。 如果我刷新它console.log两次。 如果我再次刷新,它会记录3次控制台日志。依此类推。每次重新加载时继续添加一个console.log/run。socket.emit也是如此。每次重新加载都会增加1个额外的 在上面的链接中,他描述了如何使用以下代码修复它: options.socket.on('close', () => { conn.close({ noreplyWait: false }); }

我有一个确切的问题:

第一次连接时,it console.logs记录了1次。 如果我刷新它console.log两次。 如果我再次刷新,它会记录3次控制台日志。依此类推。每次重新加载时继续添加一个console.log/run。socket.emit也是如此。每次重新加载都会增加1个额外的

在上面的链接中,他描述了如何使用以下代码修复它:

options.socket.on('close', () => {
  conn.close({ noreplyWait: false });
});
我很想测试一下,但不知道怎么做?有人能帮我找到正确的方向吗

我的服务器代码如下所示:

io.on('connection', function(socket){
        console.log('a user connected: ' + socket.id);
        r.table('Groups')
            .filter(r.row("members")
            .contains(req.user['id']))
            .changes({ includeInitial: true })
            .run()
            .then(function(feed){
                 feed.each(function(err, item){
                  console.log(req.user['entra']);
                //console.log(JSON.stringify(item, null, 2));

                socket.emit('group',item.new_val);
             })
          })
   });
io.on('connection', function(socket){
        io.removeAllListeners();
        console.log('a user connected: ' + socket.id);
        r.table('Groups')
            .filter(r.row("members")
            .contains(req.user['id']))
            .changes({ includeInitial: true })
            .run()
            .then(function(feed){
                 feed.each(function(err, item){
                  console.log(req.user['entra']);
                //console.log(JSON.stringify(item, null, 2));

                socket.emit('group',item.new_val);
             })
          })
   });
客户端代码:

var url = 'http://'+top.location.hostname+':4200';
var socket = io.connect(url);

socket.on('group', function(msg){
  console.log(msg);
  if (msg != null) {
    $('span#groupName').html(msg['groupName']);
  }else{
    $('span#groupName').html('Not member of any group yet');
  }
}))

我还发现有人用这种方式修复了它:

它就像一个小东西的许多代码一样,我认为这不应该是一个问题。我在上面的代码中是否有任何错误

你知道如何解决这个问题,或者如何从第一个链接测试解决方案吗?

我终于解决了

我补充说:

io.removeAllListeners();
右下:

io.on('connection', function(socket){
现在看起来是这样的:

io.on('connection', function(socket){
        console.log('a user connected: ' + socket.id);
        r.table('Groups')
            .filter(r.row("members")
            .contains(req.user['id']))
            .changes({ includeInitial: true })
            .run()
            .then(function(feed){
                 feed.each(function(err, item){
                  console.log(req.user['entra']);
                //console.log(JSON.stringify(item, null, 2));

                socket.emit('group',item.new_val);
             })
          })
   });
io.on('connection', function(socket){
        io.removeAllListeners();
        console.log('a user connected: ' + socket.id);
        r.table('Groups')
            .filter(r.row("members")
            .contains(req.user['id']))
            .changes({ includeInitial: true })
            .run()
            .then(function(feed){
                 feed.each(function(err, item){
                  console.log(req.user['entra']);
                //console.log(JSON.stringify(item, null, 2));

                socket.emit('group',item.new_val);
             })
          })
   });

它工作正常,我不再收到多条消息/console.log或发出消息。

这拯救了我的灵魂。