【问题标题】:taffyDB not save the datataffyDB 不保存数据
【发布时间】:2018-04-26 08:26:43
【问题描述】:

我正在使用TaffyDB 拥有一个本地/离线数据库

但不幸的是 - 刷新浏览器选项卡后 - 它会丢失数据

示例: 我有这个初始变量

var clist = TAFFY();

按钮上的 onclick 事件 - 它执行此语句

clist.insert({"123" , count:count , color:color , size:size});

点击后 - 并重新加载浏览器选项卡,我执行此语句

alert(clist({PID : "123"}).count());//output 0

然而前面的语句应该输出 1

【问题讨论】:

    标签: javascript database taffydb


    【解决方案1】:

    但不幸的是 - 刷新浏览器选项卡后 - 它会丢失数据

    嗯,是的,这就是 TaffyDB 的工作原理。

    然而前面的语句应该输出 1

    不,不应该。

    TaffyDB 仅在内存中。一旦脚本的上下文被删除,例如在页面重新加载时,它就消失了。如果你想坚持下去,你必须自己去做。

    最简单的做法是将整个数据集序列化为 JSON 并将其推入localstorage,前提是它足够小以适合那里。

    【讨论】:

    • 非常感谢 - 你能告诉我另一个解决方案吗?另一个将数据保存在本地/JSON 文件中的数据库
    • 我不喜欢任何浏览器存储解决方案——因为用户可以清除缓存而我丢失了它——我更喜欢处理 JSON 文件
    • 用户可以删除他们想要的任何内容,那么您到底有什么想法?您不能只是将任意文件读/写到磁盘,如果可以的话,它可以像浏览器缓存一样被用户轻松删除。你是说你宁愿将你的数据序列化为一个 blob,并提示下载文件?另外,如果您不需要与文本兼容的序列化格式,请考虑使用 CBOR。
    【解决方案2】:

    根据taffydb documentation,要将数据持久化到localStorage,您可以使用db.store()

    let db = TAFFY()
    db.store('mydb')
    

    这个函数既可以将当前数据存储在内存中,也可以检索以前存储的数据。因此,如果您在脚本开头调用 store,则在窗口刷新时,将加载存储的数据。

    注意:但是,db.store() 的保存例程被称为非阻塞进程...因此,如果您希望立即检索使用 localStorage 上的其他调用存储的数据,它可能不存在。因此,store() 的最佳做法是在窗口加载时调用它,然后在您希望保存现有数据时调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2020-03-25
      • 2021-10-05
      • 1970-01-01
      相关资源
      最近更新 更多