更輕量級的本地文件數據庫 lowDB 實現 CRUD (JSON 文本讀寫, 支持 Node, Electron and the browser)

一分鐘入門

lowdb 是一個基于 Lodash 的小型本地 JSON 數據庫。神器!

  • 可以語義化較強的查詢/操作方法,對指定的文本文件或者瀏覽器 LocalStorage 內容進行精確的查詢讀寫操作
  • 基于 Lodash, 支持大量的處理方法
  • 支持 JSON 格式文本及任意可被轉換為 JSON 結構的文本數據 (xml/yaml/toml/ini)

具體使用請參照 Github: https://github.com/typicode/lowdb

數據內容

{
  "posts": [
    { "id": 1, "title": "lowdb is awesome" },
    { "id": 2, "title": "sooooooo good" }
  ],
  "user": {
    "name": "typicode"
  },
  "count": 1
}

常用操作

// Node.js
// npm install lowdb
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')

const adapter = new FileSync('db.json')
const db = low(adapter)

// Add a post
db.get('posts')
  .push({ id: 1, title: 'lowdb is awesome'})
  .write()

// Set a user using Lodash shorthand syntax
db.set('user.name', 'typicode')
  .write()
  
// Increment count
db.update('count', n => n + 1)
  .write()

// Sort the top five posts.
db.get('posts')
  .filter({published: true})
  .sortBy('views')
  .take(5)
  .value()


// Get post titles.
db.get('posts')
  .map('title')
  .value()

// Get the number of posts.
db.get('posts')
  .size()
  .value()

自定義 serialize/deserialize 函數支持更多格式

const adapter = new FileSync('array.xml', {
  defaultValue: [],
  serialize: (array) => toXMLString(array),
  deserialize: (string) => fromXMLString(string)
})

使用場景

之前使用 JavaScript 寫過很多小工具,包括文件格式轉換,簡單數據處理,文檔生成,代碼生成等等。

這種輕量級的處理場景下本地數據存儲簡直是剛需,在 Node 環(huán)境中我通常使用 JSON 文件來進行存儲,以下是某產品文檔中的一則 FAQ JSON 格式數據示例,生成文檔的時候我需要指定 category 提取相應的信息,指定 rank 來進行文檔排序:

{
  "faq": [
    {
      "title": "EMQ X中ssl resumption session的使用",
      "category": "使用教程",
      "tag": ["TLS"],
      "content": "修改emqx.conf配置中的 reuse_sessions = on 并生效后。",
      "rank": 0
    },
    {
      "title": "MQTT 客戶端斷開連接統(tǒng)計",
      "category": "運維管理",
      "tag": ["指標"],
      "content": "執(zhí)行 `emqx_ctl listeners`,查看對應端口下的 `shutdown_count` 統(tǒng)計。",
      "rank": 100
    },
    {
      "title": "EMQ X 的百萬連接壓力測試的場景是什么?",
      "category": "運維管理",
      "tag": ["性能測試"],
      "content": "在EMQ 2.0版本發(fā)布的時候,由第三方軟件測試工具服務提供商 [XMeter](https://www.xmeter.net) 執(zhí)行了一次百萬級別連接的性能測試。...",
      "rank": 98
    }
  ]
}

使用前

很長一段時間里我在 Node.js 中采用 JavaScript 的數組查找、過濾和排序來完成數據篩選,在數據變更之后使用寫文件的方式再次寫入磁盤。

const { faq } = require('./datasource.json')

// 過濾
const deployFAQ = faq.filter($ => $.category === '運維管理')

// 以下還有排序代碼...

基于如此復雜且不清晰的操作流,我多次思考糾結我是否需要一個數據庫來處理這部分業(yè)務,哪怕是 SQLite 都行,但是引入數據庫后我又不得不再開發(fā)一個 Admin 界面來進行增刪查改。

使用后

const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')

const adapter = new FileSync('db.json')
const db = low(adapter)

db.defaults({ faq: [] })
  .write()

// Filter and Sort by rank.
const faq = db.get('faq')
  .filter({ category: '運維管理' })
  .sortBy('rank')
  .value()
console.log(faq)

項目計劃

  1. 研究支持開源項目 emqx 前端配置項配置
  2. 封裝常用在線文檔/代碼工具如 Markdown 表格轉換, yapi 轉 Element 表格及表單代碼工具

文章首發(fā)

物聯(lián)網 IoT 應用集成、前端倒騰 W I v 的博客 https://wivwiv.com

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容