Lndb
📁 lndb是基于本地文件系统封装的一套灵活的持久化存储数据库,支持Node、Electron等。
使用文件系统作为基础存储方式,并在上层读写时提供灵活的插件机制,这意味着你可以根据自己的需求定制读写功能,详细信息查看插件机制。
安装
$ npm install lndb
使用
const LNDB = const db = 'your/path'// 初始类型const pg = db// 写入数据pg // 读取类型信息pg // 删除指定key的缓存pg // 清空类型下所有缓存pgclear
读写信息说明
- 默认情况下不论存入何种数据类型,通过
.get(key)
获取到的都是一个文件结构,这是为了可以自由的获取文件信息。 如上面举例那样的Object
类型数据默认存入data.json
中:
你通过__lndb__/page/ └── key └── data.json
.get(key)
获取到的数据像这样:如果使用内置插件内的unzip
这样的插件来存入文件,文件树像这样:
此时,你通过__lndb__/page/ └── key └── files ├── index.html └── about.html
.get(key)
获取到的数据像这样: - 如果存入数据是如上面举例那样的
Object
类型,在读取时会默认加载数据信息可以通过get(key).data
获取,如果需要更灵活的操作数据信息可以使用lodash
插件。 - 由于使用的是文件命名,所以命名上对符号(
\
/
) 是敏感的,虽然程序会默认使用__lndb__
来替换敏感符号后再命名文件,但是希望你在使用的时候注意规避敏感符号以保证程序正常运行。
插件机制
也许默认的读写操作并不能满足你的需求,值得一提的是,Lndb 的核心是可以灵活的扩展读写功能,你可以引入符合标准的插件来替换现有的读写功能:
const demoPlugin = // add plugindb// init instanceconst pg = db pg
- .use(name, plugin, options)
name
唯一名称plugin
插件对象options
插件参数
- .set/.get(k, v, {name, options})
name
唯一名称options
插件参数,替换db.use()
时的预制参数
插件规范
现在你可以根据自己的需求编写自己的读取方式,但是你必须遵循必要的规范,插件模板看起来像这样:
moduleexports = { // 你的自定义操作 // 调用文件获取 Lnfls // 调用文件写入 Lnfls // 获取当前数据保存路径 Lnflsdatapath return true }
目前插件允许你在set()
,get()
上做自定义操作。
插件内是一个对象,对象内函数名为install
,函数带有三个参数:
- install(Ln, params, options)
Ln
当前读写上下文params
读写时的参数{id, value}
options
传入插件的配置信息
内置插件
内置插件默认已经存在于系统插件列表中,可以在.get()
.set()
直接使用
lodash
读取扩展,使用lodash插件灵活读写,该插件参考了lowdb
的使用方式,这可以很灵活的处理单个文件,具体参考lodash文档
lowdb
的使用方式,这可以很灵活的处理单个文件,具体参考lodash文档const pg = db const _ = pg__ // { hello: 'lndb!'}_value // true_ // update -> { hello: 'LNDB!!'}
lodash plugin API
- _.setState()
- 写入数据到实例中
- _.getState()
- 获取当前实例的数据
- _.update()
- 更新数据
- _.read()
- 读取磁盘中的数据到实例,返回实例
- _.write()
- 所有写入操作需要调用
.write()
后才写入磁盘
- 所有写入操作需要调用
unzip
写入扩展,使用unzip写入zip文件时解压到指定目录下,意味着可以通过.get()
方法获取到解压后的路径,便可使用里面的文件
.get()
方法获取到解压后的路径,便可使用里面的文件pg pg
value
<Buffer> | <Base64>
License
😃 如果你有任何意见或者想贡献本项目,欢迎提交Issues或PR。
MIT - yansenlei