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

一分鐘入門

lowdb 是一個基于 Lodash 的小型本地 JSON 數(shù)據(jù)庫。神器卤橄!

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

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

數(shù)據(jù)內(nèi)容

{
  "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 函數(shù)支持更多格式

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

使用場景

之前使用 JavaScript 寫過很多小工具乾闰,包括文件格式轉(zhuǎn)換绣的,簡單數(shù)據(jù)處理速客,文檔生成戚篙,代碼生成等等。

這種輕量級的處理場景下本地數(shù)據(jù)存儲簡直是剛需挽封,在 Node 環(huán)境中我通常使用 JSON 文件來進行存儲已球,以下是某產(chǎn)品文檔中的一則 FAQ JSON 格式數(shù)據(jù)示例臣镣,生成文檔的時候我需要指定 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 的數(shù)組查找、過濾和排序來完成數(shù)據(jù)篩選聋呢,在數(shù)據(jù)變更之后使用寫文件的方式再次寫入磁盤苗踪。

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

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

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

基于如此復雜且不清晰的操作流,我多次思考糾結我是否需要一個數(shù)據(jù)庫來處理這部分業(yè)務削锰,哪怕是 SQLite 都行通铲,但是引入數(shù)據(jù)庫后我又不得不再開發(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 表格轉(zhuǎn)換, yapi 轉(zhuǎn) Element 表格及表單代碼工具

文章首發(fā)

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

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颅夺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛹稍,更是在濱河造成了極大的恐慌吧黄,老刑警劉巖周荐,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渺蒿,死亡現(xiàn)場離奇詭異,居然都是意外死亡京景,警方通過查閱死者的電腦和手機奉芦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門赵抢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仗阅,你說我怎么就攤上這事昌讲。” “怎么了减噪?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵短绸,是天一觀的道長车吹。 經(jīng)常有香客問我,道長醋闭,這世上最難降的妖魔是什么窄驹? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮证逻,結果婚禮上乐埠,老公的妹妹穿的比我還像新娘。我一直安慰自己囚企,他們只是感情好丈咐,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著龙宏,像睡著了一般棵逊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上银酗,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天辆影,我揣著相機與錄音,去河邊找鬼黍特。 笑死蛙讥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的灭衷。 我是一名探鬼主播次慢,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼今布!你這毒婦竟也來了经备?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤部默,失蹤者是張志新(化名)和其女友劉穎侵蒙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傅蹂,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡纷闺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了份蝴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犁功。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖婚夫,靈堂內(nèi)的尸體忽然破棺而出浸卦,到底是詐尸還是另有隱情,我是刑警寧澤案糙,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布限嫌,位于F島的核電站靴庆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怒医。R本人自食惡果不足惜炉抒,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稚叹。 院中可真熱鬧焰薄,春花似錦、人聲如沸扒袖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僚稿。三九已至凡桥,卻和暖如春蟀伸,著一層夾襖步出監(jiān)牢的瞬間蚀同,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工啊掏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蠢络,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓迟蜜,卻偏偏與公主長得像刹孔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子娜睛,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容