本地存储服务,提供json数据库、sqlite数据库。
引入模块
const Storage = require('ee-core').Storage;
json数据库
连接
const jdb = Storage.JsonDB.connection('demo');
# 或
let lowdbOptions = {
driver: 'lowdb'
}
const jdb = Storage.JsonDB.connection('demo', lowdbOptions);
jdb.setItem()
介绍:创建一个存储的 key/value 对
jdb.setItem('test_key', {name:'xiaoming'})
jdb.getItem()
获取存储的key值
jdb.getItem('test_key')
jdb.db
介绍:实例化后的lowdb对象
- 注:lowdb文档:https://www.npmjs.com/package/lowdb
用法
# 添加对象和数据
db.defaults({posts: [], user: {}, count: 0})
.write();
db.get('posts')
.push({id: 1, title: 'lowdb is awesome'})
.write()
db.set('user.name', 'typicode')
.write()
db.update('count', n => n + 1)
.write()
运行程序会在项目中添加db.json文件,里面存储了添加的数据:
{
"posts": [
{
"id": 1,
"title": "lowdb is awesome"
}
],
"user": {
"name": "typicode"
},
"count": 1
}
可以使用任何lodash强大的函数,比如: .get() 和 .find(),并且可以串联地使用:
db.get('users')
.find({sex: 'male'})
.value()
查询
可以直接使用lodash的函数进行查询。需要注意的是有些操作可能会导致原数据被修改,为了避免这种误操作,需要使用 .cloneDeep(),操作都是惰性的,只有调用 .value()或 .write()后才会正式执行。
检查users是是否存在
db.has('users')
.value()
设置users
db.set('users', [])
.write()
排序、选择
db.get('users')
.filter({sex: 'male'})
.sortBy('age')
.take(5)
.value()
获取特定字段
db.get('users')
.map('name')
.value()
获取数量
db.get('users')
.size()
.value()
获取特定信息
db.get('users[0].name')
.value()
更新信息
db.get('users')
.find({name: 'Tom'})
.assign({name: 'Tim'})
.write()
移除属性
db.unset('users.name)
.write()
深拷贝
db.get('users')
.cloneDeep()
.value()
使用id索引
可以使用 [shortid](https://github.com/dylang/shortid) 为数据库中的每一条记录创建唯一的id索引,然后通过id检索操作记录:
``` const shortid = require(‘shortid’)
const postId = db .get(‘posts’) .push({ id: shortid.generate(), title: ‘low!’ }) .write() .id
const post = db .get(‘posts’) .find({ id: postId }) .value()
<a name="dM3Fx"></a>
### sqlite数据库
<a name="iLfey"></a>
#### 连接
// sqlite数据库 let sqliteOptions = { driver: ‘sqlite’, default: { timeout: 6000, verbose: console.log // 打印sql语法 } } const sdb = Storage.JsonDB.connection(‘sqlite-demo.db’, sqliteOptions);
<a name="snM73"></a>
#### sdb.db
插入数据
const insert = sdb.db.prepare(INSERT INTO ${table} (name, age) VALUES (@name, @age)
);
insert.run(data);
```