聊聊 electron-vue-serialport 的添加數據持久化分析以及解決方案,關聯 pouchdb 、nedb 、vuex-persistedstate


什么是 數據持久化?

數據持久化其實就是指期望把數據長期存儲下來,而這個問題被拆分成很多場合,用這篇記錄一下一些細節和過程。

起因

起因 electron-vue-serialport 使用的 electron-vue 基礎 vue-admin-template 在 yarn run dev 下 js-cookie 正常使用,但 build 后無法獲取存放在 Cookie 中的 token 數據,經過寫入后讀取的測試返回仍然是 undefined 。

這也就說明它可能並非真正的同步模式,考慮到有太多組件的融合,最初判斷是 electron 的 Cookies 炸了,例如需要時間連接本地數據,但可能加載過程過快,無法在獲取 token 前完成數據的載入,也有可能是本來就存在的版本 bug 之類的。

准備解決方案

既然存在 bug ,然后也沒法通過更新環境解決的情況下,就直接改寫之。

  • 既然是要 cookie 數據,那就用其他數據模擬一個接口送回即可。
  • 既然要持久化數據,考慮到之后也有小型數據庫需求,不妨一起考慮。

於是選取了 pouchdb 和 nedb 做長期存儲,不過此時將失去 Cookies 的過期功能,但好像也並非所要的功能。

實踐結論

為什么我在做儀器類客戶端還需要這個登錄的功能是因為,設備機型的登錄表示你所使用的配置版本,這樣的好處就是統一入口,然后分發不同的功能接口,對於一個公司來說相對規范化整體框架。

最早懷疑是 mock 在 electron 無法工作的原因,后來經過檢查是 build 后的 electron 的 js-cookie 無法工作,然后觀察 js-cookie 的設計模式是同步的,這與上述的數據庫的使用相違背,不得已修正為異步調用。

其中 pouchdb 存在的問題是 electron 的 Windows 32 bit 無法編譯通過,而 pouchdb-browser 存在於 瀏覽器 的 local storage 中無法滿足我需要的本地化文件,就換了 nedb ,辛苦寫了模型對上去后,一切正常工作后。

又產生新的問題,就是 Cookies 數據沒有先於 login 驗證前加載完成,導致需要重新登錄,這是因為 electron 關閉后,要加載數據回來需要的一些異步時間,而頁面啟動后,不可能會允許寫一段毫無意義的延時同步數據(下下策),那么如何解決呢?

回到原點

最后放棄寫垃圾代碼注入其中,改用 vuex 的 vuex-persistedstate 插件,自動在框架內部同步數據,強組件綁定關系。

很意外的是,如果一開始我就想清楚我想要的效果,可能就會少走這些彎路,但實際上也是由於,我並不了解 electron vue nodejs 等數據持久化組件的選取,所以要預先了解和學習一波才能應用到其中。

最后代碼反而刪減了,基本沒有做任何改動,也沒有添加多余的模擬接口注入。

更新在 remove auth Cookies and use vuex-persistedstate

個人感悟

在現代 Javascript 的設計模式上可能要緩存+同步數據,但實際上深度綁定組件的話,可以避開不必要的異步數據同步的問題。

最后,關聯上一篇博文,因為在實踐過程中分析了一下 js 的 import 機制,如果有 python 經驗的可能會有些疑惑是否一致,當然答案是基本一致,可以放心的到處 import 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM