流星在卸载前不会重置mongo

时间:2019-05-16 21:54:25

标签: mongodb google-chrome firefox meteor

我正在尝试创建一个游戏,当玩家关闭窗口时,mongo数据库将更改为“ player1 is inactive”。

这是我在main.js中的代码:

window.addEventListener('beforeunload', function (e) {
   Games.update({_id : myGuy},{$set:{active : 0}});
  // Cancel the event
e.preventDefault();
  // Chrome requires returnValue to be set
  e.returnValue = '';
});

它偶尔会在Firefox中运行,而几乎不会在Chrome中运行。我在想流星可能会更改本地迷你mongo,但不知道要更改服务器上的mongo吗? (只是一个想法。)

1 个答案:

答案 0 :(得分:0)

作为对Jankapunkt的回应,上面的代码在客户端,但是我仍然启用了“自动发布”,所以这应该不是问题。

响应Jimish Gamit,感谢您提供信息。确实确实是Chrome的错误。我尝试了警报框,但似乎没有帮助。

window.addEventListener('beforeunload', function (e) {
Games.update({_id : myGuy},{$set:{active : 0}});
 e.preventDefault();
 return "alert" 
})

作为解决方法,我刚刚创建了一个自定义的aframe组件,该组件创建了一个密钥,该密钥可以在需要时将播放器重置为非活动状态,这是我能想到的最好的结果。

AFRAME.registerComponent('reset', {
    init: function() {
      document.addEventListener('keydown', (event) => {
      const keyName = event.key;
      if (keyName === 'r') {
                if (Games.findOne()) {
                  var playerId1 = Games.findOne({name: "player1"})._id;
                  var playerId2 = Games.findOne({name: "player2"})._id; 
                  Games.update({_id : playerId1},{$set:{active : 0}});
                  Games.update({_id : playerId2},{$set:{active : 0}});
                }
           }
        })
     }
  })