2017-07-03 95 views
0

我做了一个使用socket.io和节点的聊天应用程序。Socket.io和本地存储

  • Scenario-现在需要一次用户重新连接到邮件的同步数据存储到浏览器的本地存储,插座被断开之前(断开事件emited)和获取/到本地存储。
  • Issue -但问题是,如果我从“disconnect”处理程序的内部发回一些事件回到客户端,并且在此事件localStorage.setItem('msgText', msg)的客户端内部处理程序的那里。它不保存到本地存储。(如在断开事件,客户端已经断开)

  • 用于node-localstorage模块设置在浏览器本地存储数据,而绘画图在用户登录时,在,但它不是将数据保存到浏览器的localStorage的

const LocalStorage = require('node-localstorage').LocalStorage let localStorage = new LocalStorage('./scratch') localStorage.setItem('name_test', 'tom') console.log(localStorage.getItem('name_test'))

任何建议,如何应对方案/问题是最赞赏呢?

回答

0

当您触发disconnect事件时,您可以在之前设置本地存储。如果我理解正确,我相信下面的例子应该为你

function disconnectUserFromChat() { 
    return new Promise(function(resolve, reject) { 
    try { 
     localStorage.setItem('key', 'Value') 
     resolve() 
    } catch(error) { 
     reject(error) 
    } 
    }) 
}) 

disconnectUserFromChat() 
    .then(function() { 
    socket.on('disconnect', function() { 
     console.log('Disconnected') 
    }) 
    }) 
+0

感谢杰克工作,但是当'标签关闭disconnect'事件自动从客户端发射。我们无法从应用程序中触发该事件 –

+0

**编辑上述**谢谢Jack,但'disconnect'是一个保留事件,当套接字断开或关闭时,它将从客户端自动触发。我们无法从应用程序中触发该事件 –

+0

你看过'window.onbeforeunload'事件吗?您可以将您的本地存储逻辑放入此事件中并在退出之前保存。这里是它的文档 - https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload – Jackthomson