低分数b

小项目的本地 JSON 数据库
// This is pure JS, not specific to lowdb ;)
db.data.posts.push({ id: 1, title: 'lowdb is awesome' })
// Save to file
db.write()
// db.json
{
"posts": [
{ "id": 1, "title": "lowdb is awesome" }
]
}
如果你喜欢"低",请参看 页:1 (试验跑道)和 斯蒂诺 (快速文件撰写器).
发起人
成为赞助商,在这里有你的公司标志。 。 。 .
请帮我建立OSS GitHub 赞助商
特征
- 轻巧
- 最小数 并且容易学习API
- 使用 普通联署材料
- 改进 类型脚本 支助
- 原子写入
- 可隐藏 :
- 更改存储, 文件格式( JSON, YAML,...) 或通过 添加加密 适配器
- 加入罗达斯,拉姆达,... 超级大国!
安装
npm install lowdb
使用量
Lowdb 2是一个纯粹的无害环境管理包. 如果你在你的项目里 进口有问题,请 读取此。 。 。 .
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, 'db.json')
const adapter = new JSONFile(file)
const db = new Low(adapter)
// Read data from JSON file, this will set db.data content
await db.read()
// If file.json doesn't exist, db.data will be null
// Set default data
db.data ||= { posts: [] }
// db.data = db.data || { posts: [] } // for node < v15.x
// Create and query items using plain JS
db.data.posts.push('hello world')
db.data.posts[0]
// You can also use this syntax if you prefer
const { posts } = db.data
posts.push('hello world')
// Write db.data content to db.json
await db.write()
// db.json
{
"posts": [ "hello world" ]
}
类型脚本
Lowdb现在带有 TypeScript 支持. 您甚至可以输入 db.data 内容.
type Data = {
posts: string[] // Expect posts to be an array of strings
}
const adapter = new JSONFile<Data>('db.json')
const db = new Low<Data>(adapter)
db.data
.posts
.push(1) // TypeScript error 🎉
洛达什
方便地添加lodash或其他公用库来改进lowdb.
import lodash from 'lodash'
// ...
// Note: db.data needs to be initialized before lodash.chain is called.
db.chain = lodash.chain(db.data)
// Instead of db.data, you can now use db.chain if you want to use the powerful API that lodash provides
const post = db.chain
.get('posts')
.find({ id: 1 })
.value() // Important: value() needs to be called to execute chain
更多实例
关于CLI、服务器和浏览器的使用,见 examples/ 目录.
API 密码
类
Lowdb有两个类(用于同步和同步适配器).
new Low(adapter)
import { Low, JSONFile } from 'lowdb'
const db = new Low(new JSONFile('file.json'))
await db.read()
await db.write()
new LowSync(adapterSync)
import { LowSync, JSONFileSync } from 'lowdb'
const db = new LowSync(new JSONFileSync('file.json'))
db.read()
db.write()
方法
db.read()
电话 adapter.read() 组合 db.data。 。 。 .
说明: JSONFile 财务报告和审定财务报表 JSONFileSync 适配器将设置 db.data 改为 null 如果文件不存在的话.
db.data // === null
db.read()
db.data // !== null
db.write()
电话 adapter.write(db.data)。 。 。 .
db.data = { posts: [] }
db.write() // file.json will be { posts: [] }
db.data = {}
db.write() // file.json will be {}
属性
db.data
保持你的DB内容。 如果你使用适配器 与低分量, 它可以是任何类型支持 JSON.stringify。 。 。 .
例如:
db.data = 'string'
db.data = [1, 2, 3]
db.data = { key: 'value' }
适配器
低维适配器
JSONFile JSONFileSync
用于读取并撰写JSON文件的适配器.
new Low(new JSONFile(filename))
new LowSync(new JSONFileSync(filename))
Memory MemorySync
内相相适者. 用来加速单位测试.
new Low(new Memory())
new LowSync(new MemorySync())
LocalStorage
同步适配器 window.localStorage。 。 。 .
new LowSync(new LocalStorage(name))
TextFile TextFileSync
读写文字的适配器. 用于创建自定义适配器 .
第三方适配器
如果你已经发布了一个适配器的Lowdb, 请随意创建 PR 添加到这里.
写入自己的适配器
您可能想要创建一个适配器来写入 db.data 到YAML,XML,加密数据,远程存储,.
适配器是一个简单的类,只需要暴露出两种方法:
class AsyncAdapter {
read() { /* ... */ } // should return Promise<data>
write(data) { /* ... */ } // should return Promise<void>
}
class SyncAdapter {
read() { /* ... */ } // should return data
write(data) { /* ... */ } // should return nothing
}
例如,让我们假设你有一些同位素存储器,并想为此创建一个适配器:
import { api } from './AsyncStorage'
class CustomAsyncAdapter {
// Optional: your adapter can take arguments
constructor(args) {
// ...
}
async read() {
const data = await api.read()
return data
}
async write(data) {
await api.write(data)
}
}
const adapter = new CustomAsyncAdapter()
const db = new Low(adapter)
见 src/adapters/ 需要更多的实例.
自定义序列化
要为 JSON 以外的格式创建适配器, 您可以使用 TextFile 或者说 TextFileSync。 。 。 .
例如:
import { Adapter, Low, TextFile } from 'lowdb'
import YAML from 'yaml'
class YAMLFile {
constructor(filename) {
this.adapter = new TextFile(filename)
}
async read() {
const data = await this.adapter.read()
if (data === null) {
return null
} else {
return YAML.parse(data)
}
}
write(obj) {
return this.adapter.write(YAML.stringify(obj))
}
}
const adapter = new YAMLFile('file.yaml')
const db = new Low(adapter)
限制
Lowdb不支持Node的集群模块.
如果您有大型 JavaScript 对象(~10-100MB你可能会遇到一些表现问题。 因为每当你打电话 db.write整个 db.data 被序列化并写入存储.
这取决于你的用法, 这可以是罚款与否。 可以通过批量操作和呼叫来缓解 db.write 只有当你需要它.
如果你计划规模化,则高度推荐使用PostgreSQL,MongoDB等数据库. .