lowdb 教學:打造輕量級本地 JSON 資料庫,支援 TypeScript

作者: Calpa Liu
字數:1393
出版:2025 年 4 月 13 日
想找一個不需設定資料庫伺服器的解決方案嗎?這篇教學將帶你認識 lowdb——一個輕量級本地 JSON 資料庫,適用於 Node.js、Electron 與前端專案。支援 TypeScript,幫助你用原生 JavaScript 快速完成資料儲存與查詢操作,適合原型開發、小型工具與桌面應用。

lowdb 的主要特性與優勢

輕量級且易於使用

lowdb 的設計理念是極度簡潔—如果你懂 JavaScript,你就已經知道如何使用 lowdb。它沒有複雜的查詢語言或 API,而是直接利用原生 JavaScript 進行資料操作。

// 使用原生 JavaScript 添加資料
db.data.posts.push({ id: 1, title: 'lowdb is awesome', views: 100 })
await db.write()

// 使用原生 Array 方法查詢資料
const { posts } = db.data
posts.filter((post) => post.title.includes('lowdb'))
posts.find((post) => post.id === 1)
posts.toSorted((a, b) => a.views - b.views)

無需額外的資料庫服務器

lowdb 將所有資料存儲在單一 JSON 檔案中,無需設置或維護單獨的資料庫服務器。這使它成為嵌入式資料庫的理想選擇,特別適合需要簡單資料存儲的小型應用程序。

類型安全與 TypeScript 支持

最新版本的 lowdb 提供了完善的 TypeScript 支持,這讓開發者可以實現類型安全的資料操作,避免運行時錯誤。

type Data = { messages: string[] }
const defaultData: Data = { messages: [] }
const db = await JSONFilePreset<Data>('db.json', defaultData)
db.data.messages.push('foo') // ✅ 成功
db.data.messages.push(1) // ❌ TypeScript 錯誤

安全的原子寫入

lowdb 支持原子寫入,這意味著即使在寫入過程中發生錯誤,資料庫也不會被破壞。這提高了資料的可靠性和一致性。

高度可擴展和可定制

通過適配器系統,lowdb 允許開發者自定義存儲方式、檔案格式(如 JSON、YAML 等)甚至添加加密功能。這種靈活性讓開發者可以根據特定需求調整資料庫行為。

測試友好

在測試環境中,lowdb 會自動切換到快速的內存模式,這使得單元測試和集成測試更加高效。

適用場景與使用者

根據搜索結果,lowdb 特別適合以下場景:

  1. 命令行工具(CLI):需要簡單資料存儲的命令行工具。
  2. 小型服務器:不需要高併發和複雜查詢功能的小型應用服務。
  3. Electron 應用:需要本地資料存儲的桌面應用程序。
  4. npm 套件:作為 npm 套件的內部資料存儲解決方案。
  5. 黑客松(Hackathon)項目:需要快速開發的小型項目。

lowdb 被 json-server 和超過 90 個 npm 上的項目使用。它的簡單性和零配置特性使其成為原型設計和小型專案的理想選擇。

使用示例

以下是使用最新版本 lowdb 的示例,注意使用 import 而非 require:

基本使用

假設我們的資料庫結構如下:

{
  "posts": []
}

我們可以使用 lowdb 來操作這個資料庫:

import { JSONFilePreset } from "lowdb/node";

interface DB {
  posts: Post[];
}

interface Post {
  id: number;
  title: string;
  views: number;
}

async function main() {
  // 初始化資料庫,設定預設值
  const db = await JSONFilePreset<DB>("db.json", { posts: [] });

  // 添加資料
  db.data.posts.push({ id: 1, title: "lowdb is awesome", views: 100 });

  // 保存更改
  await db.write();

  // 或者使用 update 方法一步完成
  await db.update(({ posts }) =>
    posts.push({
      id: 2,
      title: "Another post",
      views: 50,
    })
  );

  // 查詢資料
  const firstPost = db.data.posts;
  const popularPosts = db.data.posts.filter((post) => post.views > 50);

  console.log("firstPost", firstPost);
  console.log("popularPosts", popularPosts);
}

main();

結果會是:

{
  "posts": [
    {
      "id": 1,
      "title": "lowdb is awesome",
      "views": 100
    },
    {
      "id": 2,
      "title": "Another post",
      "views": 50
    }
  ]
}

局限性與替代方案

lowdb 的限制

雖然 lowdb 是開發小型專案、原型應用與簡易工具的理想選擇,但在面對較大或更複雜的資料需求時,它仍有一些明顯的限制。首先,lowdb 將所有資料儲存在單一 JSON 檔案中,並在操作時將整個資料集載入記憶體。當資料量超過約 10MB(約 5 萬到 10 萬筆記錄)時,效能可能明顯下降,尤其在每次讀寫時都需處理整個檔案,會導致延遲增加與系統資源消耗上升。其次,lowdb 缺乏複雜查詢能力,例如進階篩選、聚合運算或多層條件邏輯,這使它不適合中大型應用或需要高度資料處理能力的情境。

可替代方案

若你的專案在功能、效能或擴充性方面有更高需求,可以考慮其他更適合的替代方案。像是 NeDB,它是類似 MongoDB 的嵌入式資料庫,效能更佳且支援基本查詢語法;SQLite 則是一套輕量級但功能完整的 SQL 資料庫,具備 ACID 特性,適用於需要資料一致性與事務控制的應用;或者選擇 LokiJS,這是一個以記憶體為主導的文檔型資料庫,支援更複雜的查詢操作與更快的存取速度。這些工具都能根據不同的應用場景,補足 lowdb 的不足,為開發者提供更彈性與強大的資料處理能力。

結論

lowdb 是一個極簡且強大的本地 JSON 資料庫解決方案,特別適合小型專案、原型設計和不需要複雜資料庫服務的應用。它的優勢在於簡單易用、無需配置、原生 JavaScript API 以及 TypeScript 支持。

對於開發者來說,lowdb 提供了一種低門檻的資料存儲方式,讓你可以專注於應用邏輯而非資料庫設置。雖然它不適合大規模應用,但在其適用範圍內,lowdb 是一個非常實用的工具。

無論你是在開發命令行工具、Electron 應用還是需要簡單資料存儲的小型服務,lowdb 都能提供簡潔而高效的解決方案。正如其口號所說:「如果你懂 JavaScript,你就懂 lowdb」。

關於 Calpa

Calpa 擅長使用 TypeScriptReact.jsVue.js 建立 Responsive Website。

他積極參與開源社區,曾在 2019 年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在 GitHub 上公開分享個人博客程式碼,已獲得超過 300 顆星星和 60 個分支的支持。

他熱愛學習新技術,並樂意分享經驗。他相信,唯有不斷學習才能跟上快速演變的技術環境。

熱門文章

最新文章

圖片管理中心
管理圖片資源
IP 查詢
快速查詢和定位 IP 地址的地理位置和相關信息
Python 運行器
無需後端、無需登入,只需打開瀏覽器即可運行 Python 代碼(由 Pyodide 提供支持)
封面圖生成器
自動創建適合各種平台的文章封面圖
原作(青山剛昌)產生器
一鍵創建原作(青山剛昌)的封面圖
日本色彩
探索和使用傳統日本色彩
部落格內容洞察儀表板
以視覺化儀表板方式追蹤文章成效、分享熱度與分類分布,協助創作者掌握內容表現。
蒙特卡羅估算 π
使用蒙特卡羅方法演示 π 值的估算過程
LLM
使用 LLM 模型進行聊天
活動圖生成器
一鍵創建活動的封面圖
Wagmi Card
一鍵創建 Wagmi 的封面圖
Facebook Quote
Facebook Quote
Music Macro Language (MML) Studio
用程式語法編寫旋律,用音符構築想像
Blurhash
一鍵創建 Blurhash
文字分類器
使用 MediaPipe TextClassifier 分類文字
前端工程師免費工具資源
前端工程師免費工具資源
後端工程師免費工具資源
後端工程師免費工具資源
全端工程師免費工具資源
全端工程師免費工具資源
Web3 工程師免費工具資源
Web3 工程師免費工具資源
紫微斗數排盤系統|結合 AI 的命盤性格與事業財務分析生成器
紫微斗數排盤工具,輸入生日與時辰,自動生成完整命盤分析提示(Prompt)。結合最專業紫微理論與 AI 助力,助你深入解析性格、事業、財務與人際課題。免費使用,適合命理師及紫微愛好者。
PixAI Prompt 組合器|快速打造可用於 AI 繪圖的語言拼圖
使用 PixAI 卻不會寫 prompt?這個工具幫你一鍵組裝角色、表情、風格語彙,輸出高品質繪圖提示語句(Prompt),可直接貼入 PixAI 使用。適合插畫師、創作者、AI 新手與 VTuber 角色開發者。