最近在开发一款挂件,想要永久存储用户的配置数据到本地,发现数据持久化让我比较头疼
想了几种,感觉都有缺点:
-
localStorage: 这个我暂时没用过,因为我记得在某版的思源发布后,有挂件作者反映 localstorage 不好用还是怎么的(存疑),而且也不符合我的使用场景,因为我要保存的是用户的配置数据,需要一直保存,且多端同步保存
-
官方我看到有如下 api:(没研究过 go 语言,还不知道该传啥参数)
ginServer.Handle("POST","/api/storage/setLocalStorage",model.CheckAuth,setLocalStorage) ginServer.Handle("POST", "/api/storage/getLocalStorage", model.CheckAuth, getLocalStorage) ginServer.Handle("POST", "/api/storage/setLocalStorageVal", model.CheckAuth, setLocalStorageVal) ginServer.Handle("POST", "/api/storage/removeLocalStorageVal", model.CheckAuth, removeLocalStorageVal)2.
-
-
存储到特定文档或者某个特定的 block 的属性中,这种也不太好,因为万一那个文档或者 block,用户不再需要,删除了,那数据就清空了。(此方案的衍生方案:向特定的文档写入 html 片段,数据放在 html 片段 的 dataset 属性上,但是如果此 html 片段被误删,那配置文件也就没了)
-
引导用户新建一个设置文档,在此设置文档的属性上面或者文档内的特定 block 的属性上存储数据,此方案的优点是:
1.可以确保用户不会轻易删除自己的配置,即使误删,也有官方的回收站做背书,数据比较不容易丢;
2.可以在文档内的不同 block 的属性上存入数据,以此达到,一个设置文档,管理多个挂件的数据(当然,需要各个挂件的作者都把数据存入这个文档内的特定 block 上)
3.可以开发一个挂件,可视化编辑此文档中存储的各个挂件的配置,(模板作者也可以存储数据到此文档);
4.如果要删除某个挂件的配置,只需要删除存储了那个挂件配置的 block 即可,可视化操作(缺点是 block 太容易删除了,都没有弹框确认,或许可以官方下场,哈哈哈哈);
5.用户掌控所有数据,包括挂件的,完美契合思源笔记的设计哲学;缺点:
1.太有侵入性了(大胆!小小挂件,竟然胆敢让本王在朕的数字花园新建一个文档!)
2.存储的数据单一,只能存储文本类的配置数据(但是大多数挂件似乎也不太需要更高级的数据类型了?反正我不需要)
3.删除挂件,需要用户手动删除相关 block,有误删成其它 block 的可能性
-
思源官方提供 api,将数据存储在用户的本地数据目录下(或许已经有了?只是我不知道?有的话请大佬们告诉我)
-
将数据存储在某个挂件本身挂载的 block 的属性上:这种是个人感觉挺好的方法了 😄
- 优点:当用户不再需要这个挂件了,直接移除即可,相应的配置数据也一并移除了,没有额外的操作,也没有垃圾数据残留;并且多个相同挂件的数据互不影响,方便隔离
- 缺点:目前没有找到啥 api 能在挂件内准确的获取该挂件所在 block 的 id
总结:还有一些其它的基于云端的方案,都被我率先放弃,毕竟本地优先,个人认为,上述方案 4 和 5 是我能想到的比较不错的方案,但是都需要额外的官方 api 支撑。如果大家有什么好的解决方案,欢迎讨论指导,如果我的描述大家有疑惑,也欢迎指出~谢谢大家看到这里,感谢
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于