json格式的本地数据库(nodejs版)


前言

开发过程中,我们有时候需要在本地配置记录一些结构化信息,这些信息放在环境变量配置显得过重,如果引入SQLite之类的数据库又显得大材小用。这个时候一个支持添加,删除,修改和查询操作的轻量化数据库就显得非常有价值了。


一、数据存储格式定义

默认表的名称为defaultTable,用一个数组来存储数据,文件名:db.json

{
    "defaultTable": [
        {
            "id": 1,
            "name": "name updated"
        }
    ]
}

二、使用步骤

1. 封装数据库的基本操作

代码如下:
index.js

import { promises as fs } from 'fs'

const dbFile = './db.json'
const defaultTable = 'defaultTable'

//新增
export async function insert(row) {
  const data = await read()
  data[defaultTable].push(row)
  return await write(data)
}

//修改,必须有id主键
export async function update(row) {
  const data = await read()

  data[defaultTable].forEach((value, index) => {
    if (value.id === row.id) {
      data[defaultTable][index] = row
      return false
    }
  })
  await write(data)

  return data[defaultTable]
}

//查询,id不传代表查询所有数据
export async function select(id) {
  const data = await read()
  if (id) {
    let found = data[defaultTable].find((element) => element.id === id)
    return found
  } else {
    return data[defaultTable]
  }
}

//删除,必须有id主键
export async function remove(id) {
  const data = await read()

  const updateData = []
  data[defaultTable].forEach((value, index) => {
    if (value.id !== id) {
      updateData.push(value)
    }
  })
  data[defaultTable] = updateData
  return await write(data)
}

async function read() {
  const data = await fs.readFile(dbFile)
  return JSON.parse(data.toString())
}

async function write(data) {
  return fs.writeFile(dbFile, JSON.stringify(data))
}

2.数据操作示例

代码如下:

import { insert, remove, update, select } from './index.js'

await insert({ id: 1, name: 'name1' })
const row1 = await select(1)
console.log('select 1', row1)

await insert({ id: 2, name: 'name2' })
const row2 = await select(2)
console.log('select 2', row2)

await remove(2)
const row3 = await select()
console.log('select after remove', row3)

await update({ id: 1, name: 'name updated' })
const row4 = await select(1)
console.log('select after update', row4)

结果输出:

select 1 { id: 1, name: 'name1' }
select 2 { id: 2, name: 'name2' }
select after remove [ { id: 1, name: 'name1' } ]
select after update { id: 1, name: 'name updated' }

总结

以上就是json格式数据库的实现思路,本文仅简单封装了数据操作的几个常用操作,在此基础上根据需求可以继续完善相关功能,比如批量的新增,更新,删除等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值