持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
谈起数据库,大家往往会说mySQL,Mongodb,Redis等等,但实际上这些数据库往往是用于大型软件或系统的,当我们构建一些简单的server,你应该想起来:Lowdb
什么是Lowdb
lowdb是一个本地的json文件数据库,简单来说就是用一个json文件来充当数据库,来实现增删改查这些数据库的基本的功能。 lowdb具有如下优点:
- 轻量化
- 纯js实现
- 更好的typescript支持
- 原子化写入:简单理解就是不会错误写入,你指定A,就会写入A,这对数据库十分重要
何时使用
当你构建一些简单的server,或者app的时候。你不需要搞一个服务器,装mySQL,配置权限,再本地连接,然后选择一个orm,再下来才是写你的业务代码。
现在使用lowdb,只需要新建一个json文件就行了。
基本使用
安装
npm install lowdb
初始化
lowdb 3.0使用了ESM+typescript重写,与之前2.0都有一些变化,首先你要保证你的项目是ESM,后续我也会写一篇文章告诉你node如何使ESM。
- 首先新建一个空文件夹 并初始化
sudo mkdir lowdb
cd lowdb
npm init -y
-
打开package.json,新增一个
"type":"moudle" -
新建基本目录
sudo mkdir src
sudo mkdir db
- 我们在db下新建一个文件data.json,在src下新建db.js
基本目录如下图所示
├─src
│ ├─db.js
├─data
│ ├─data.json
----
现在开始引入lowdb,首先你需要读取data.json的路径,然后lowdb会生成读写适配器,类似于viewMode来读写这个json文件。
import { join, dirname } from 'path'
import { Low, JSONFile } from 'lowdb'
import { fileURLToPath } from 'url'
const __dirname = dirname(fileURLToPath(import.meta.url));
// Use JSON file for storage
const file = join(__dirname, '../data/db.json')
console.log('data path --->',file)
const adapter = new JSONFile(file)
const db = new Low(adapter)
export default db
API
read
读取文件
await db.read()
console.log(db.data)
write
写入数据
await db.write()
这里其实lowdb3新更新的api,我大概可以想的,read的时候时把文件读取到db.data中,这里其实是一个对象,然后你可以随便去修改,最后通过write写入。
await db.read()
db.data = {
list:[]
}
db.data.list.push(1,2,3)
await db.write()
最后data.json应该就是
{
"list":[1,2,3]
}
这里需要注意不要频繁调用read和write,因为可能会有性能问题。
Lodash API
lowdb3.0还支持使用lodash的api,我们需要继承一下Low这个类
import lodash from 'lodash'
type Post = {
id: number;
title: string;
}
type Data = {
posts: Post[]
}
// Extend Low class with a new `chain` field
class LowWithLodash<T> extends Low<T> {
chain: lodash.ExpChain<this['data']> = lodash.chain(this).get('data')
}
const adapter = new JSONFile<Data>('db.json')
const db = new LowWithLodash(adapter)
export default db
使用的时候通过db.chain这个API,具体其他API你可以在ts直接看见
const post = db.chain
.get('posts')
.find({ id: 1 })
.value()
各种适配器Adapter
lowdb的强大之处就是提供了各种适配器,在前文中我使用了JSONFile这个适配器,这其实是一个异步的JSON文件适配器,常用的有
JSONFile异步的JSON文件JSONFileSync同步的JSON文件Memory异步的使用内存MemorySync同步的使用内存LocalStorage本地存储,使用这个要注意空间大小TextFile异步的纯文本,主要用于自定义适配器TextFileSync异步的纯文本,主要用于自定义适配器 同时,lowdb还支持自定义适配器,你可以适配各种文件格式,数据类型
限制
官方文档中推荐lowdb的文件大小不超过100MB,因为在js中,格式化json主要用JSON.parse()和JSON.stringify,当超过100MB之后会有无法避免的性能问题。还有如果你使用localStorage,
限制应该是5MB。这也是我一开就说应用于小型服务的原因。
最后这里贴一下lowdb地址 github.com/typicode/lo…