目的

作为前端程序员,你可能不善于维护数据库。前端更擅长于使用轻量级工具,任何重型技术,对前端人员来讲,都太过麻烦,我们需要每天在网络上闪转腾挪,游走在各种网站页面接口和源码之间,实在是不想整个服务器,维护个数据库。

前端领域最熟悉的JSON数据接口,JSON格式与javascript的对象数据类型完全兼容,我们是否可以使用JSON文件作为一个小型的数据库,完成一些数据储存的功能。

虽然,存储数据这个事情,已经超出了前端范畴,但是作为一个广义的js程序员,这都不是问题,nodejs也是必备技能之一。

lowdb

Github: https://github.com/typicode/lowdb

lowdb是个很好解决这个问题的包,有了它,我们就可以轻松的操纵JSON文件了,api也很简单

创建对象

import { Low, JSONFile } from 'lowdb'
const db = new Low(new JSONFile('file.json'))

这样,我们就有一个叫db的对象了。

读取数据

await db.read()

这个操作会读取文件中现有的数据,生成一个db.data的对象。

操作数据

db.data ||= { posts: [] }             // Node >= 15.x
db.data.posts.push('hello world')

加入你要加入的数据,但这时其实数据还没存到文件里。

写入数据

await db.write()

最后一步,这样数据就写入文件了。

备注

lowdb是一个 pure ESM package

根据官方文档解释,lowdb的源码,目前已经都用ESM模块标准编写了,也就是只支持ES6的importexport,不再支持require()。这就产生了一个问题,你的项目可能都是基于require()CommonJS模块标准,怎么使用这个包呢。

原理可以参看阮老师的文章:Node.js 如何处理 ES6 模块

具体的解决方法就是,下边的代码

const { Low, JSONFile } =  await import('lowdb')

这个方法需要你的Node.js大于一定版本,如果不支持请升级node

为什么没有增删改查方法

我一开始也在纠结这个问题,如果作为数据库使用,至少应该有增删改查的方法吧。后来仔细想了想,其实完全不用,无非就是js操作数组,只要熟练使用js的一些数组方法就可以了,包括但不限于:push find map filter splice sort等。也可以直接安装lodash使用更多方法。