安装
npm install lowdb --save
特点
- 轻量级
- 不需要服务器
- 有lodash丰富的API
- 基于内存和硬盘的存储、
###使用
// 引入lowdb
let low = require('lowdb');
// 引入同步写入适配器
let FileSync = require('lowdb/adapters/FileSync')
// 申明一个适配器并定义其名字, 即生成一个xcr.json的json文件,用来存储数据
let adapter = new FileSync('xcr.json');
// 载入适配器, 即使用变量保存,方便使用
let db = low(adapter);
// 定义默认结构,即向json文件写入默认的数据结构
db.defaults({
post: [],
user: {},
count: 0
}).write();
// 使用get方法获取结构内的post属性并追加内容写入文件内
db.get('post').push({ id: 1, title: 'lowdb is awesome' }).write();
// 使用set方法,新建结构内对象的属性并写入文件内
db.set('user.name', 'typecode').write();
// 使用update方法更新属性值
db.update('count', n => n+1).write();
运行js文件后的结果
{
"post": [
{
"id": 1,
"title": "lowdb is awesome"
}
],
"user": {
"name": "typecode"
},
"count": 1
}
可以使用lodash强大的功能
lowdb 是基于 lodash 构建的,所以可以使用任何 lodash 强大的函数,比如:_.get() 和 _.find(),并且可以串联地使用:
比如想获取json文件内的id为1的数据
// 比如使用_.get或者_.find
let a = db.get('post').find({ id: 1 }).value();
console.log(a);
// 结果为{ id: 1, title: 'lowdb is awesome' }
API
仅列举部分API,有需要可以去lowdb的github或者npm查看具体使用方法
// 获取文件内的所有数据
db.getState();
// 写入数据
db.write();
// 判断结构内是否有对应的属性,有返回true,没有返回false
db.has('posts').value()
// 获取全部的某一条属性
db.get('post')
.map('title')
.value()
// 获取某一个属性内有多少条数据 针对数组
db.get('post')
.size()
.value()
// 获取数组内的属性值
db.get('post[0].title')
.value()
// 修改数组内的属性值,将post内的'lowdb is awesome'修改为'xcr is powerful'
db.get('post')
.find({ title: 'lowdb is awesome' })
.assign({ title: 'xcr is powerful' })
.write()
// 移除某一条属性内所有title为lowdb is awesome的数据 针对数组
db.get('post')
.remove({ title: 'lowdb is awesome' })
.write()
// 移除对象内的属性
db.unset('user.name')
.write()
// 深度克隆数据
db.get('post')
.cloneDeep()
.value()
为每一条数据加入不同的id的库lodash-id
- 加入id保证数据的唯一性
安装 npm install lodashId
// 使用案例
let low = require('lowdb');
const lodashId = require('lodash-id')
let FileSync = require('lowdb/adapters/FileSync')
let adapter = new FileSync('xcr.json');
let db = low(adapter);
db._.mixin(lodashId)
const collection = db
.defaults({ post: [] })
.get('post');
const newPost = collection
.insert({ title: m() })
.write()
const post = collection
.getById(newPost.id)
.value()
console.log(post);
/*
json 文件保存结果
{
"post": [
{
"title": "xcr is powerful",
"id": "f28c5245-ae88-45b4-a456-4b46a96d2ac2"
}
]
}
// 多次执行
{
"post": [
{
"title": "xcr is powerful",
"id": "f28c5245-ae88-45b4-a456-4b46a96d2ac2"
},
{
"title": "xcr is powerful",
"id": "8000d4af-8c0d-48a7-8856-0cb8b6c69ff7"
},
{
"title": "xcr is powerful",
"id": "a5b895b1-f796-4aab-a7ee-1ba64ceaa71a"
}
]
}
*/