目的
作为前端程序员,你可能不善于维护数据库。前端更擅长于使用轻量级工具,任何重型技术,对前端人员来讲,都太过麻烦,我们需要每天在网络上闪转腾挪,游走在各种网站页面接口和源码之间,实在是不想整个服务器,维护个数据库。
前端领域最熟悉的JSON数据接口,JSON格式与javascript的对象数据类型完全兼容,我们是否可以使用JSON文件作为一个小型的数据库,完成一些数据储存的功能。
虽然,存储数据这个事情,已经超出了前端范畴,但是作为一个广义的js程序员,这都不是问题,nodejs也是必备技能之一。
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的import
和export
,不再支持require()
。这就产生了一个问题,你的项目可能都是基于require()
的CommonJS
模块标准,怎么使用这个包呢。
原理可以参看阮老师的文章:Node.js 如何处理 ES6 模块
具体的解决方法就是,下边的代码
const { Low, JSONFile } = await import('lowdb')
这个方法需要你的Node.js
大于一定版本,如果不支持请升级node
为什么没有增删改查方法
我一开始也在纠结这个问题,如果作为数据库使用,至少应该有增删改查的方法吧。后来仔细想了想,其实完全不用,无非就是js操作数组,只要熟练使用js的一些数组方法就可以了,包括但不限于:push find map filter splice sort
等。也可以直接安装lodash
使用更多方法。