存储用户数据库使用了lowDb,是一个基于Node的JSON文件数据库。
之所以选用lowDb,是因为它足够轻量,api又足够丰富,虽然对于处理大文件性能有点捉襟见肘,
但是对于只存储书籍信息的阅读器来说,可以说是非常合适的数据库了。
- 在项目根目录安装
npm install --save-dev lowdb
- 引入lowDb
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
import LodashId from 'lodash-id'
const adapter = new FileSync('db.json')
const db = low(adapter)
db._.mixin(LodashId)
export default db
- 书籍信息的增删改查
import db from "./datastore";
//更新或添加数据
export function setMeta(meta, url, path) {
if (!db.has('posts').value()) {
db.defaults({books: []})
.write()
}
if (!db.get('books')
.find({id: meta.identifier})
.value()) {
db.get('books')
.push({id: meta.identifier, title: meta.title, creator: meta.creator, url: url, path: path, schedule: 0})
.write()
}
}
//删除书籍数据
export function deleteMeta(id) {
db.get('books').remove({id: id}).write()
}
//是否存在书籍数据
export function isMeta(id) {
return !!db.get('books')
.find({id: id})
.value();
}
//获取所有数据数据
export function getAllMeta() {
return db.read().get('books').value()
}
//创建书籍数据
export function createBooks() {
db.defaults({ books: [] })
.write()
}
//获取书籍信息
export function getMeta(id) {
return db.get('books')
.find({id: id})
.value()
}
- 用户信息的读取和插入
//设置进度
export function setSchedule(id,schedule) {
db.get('books')
.find({id: id})
.assign({schedule: schedule})
.write()
}
//更新或添加设置
export function setSetting(info) {
if (!db.has('setting').value()) {
db.defaults({setting: {bgColor: 1, fontSize: 16, fontFamily: 1}})
.write()
}
//更新背景色
if (info.bgColor) {
db.set('setting.bgColor', info.bgColor)
.write()
}
//更新字体大小
if (info.fontSize) {
db.set('setting.fontSize', info.fontSize)
.write()
}
//更新字体
if (info.fontFamily) {
db.set('setting.fontFamily', info.fontFamily)
.write()
}
}
//获取设置项
export function getSetting() {
return db.read().get('setting').value()
}
- 最终的db.json 代码如下
书籍设置项- id 书籍的id
- title 书籍信息
- creator 作者
- url 封面base64数据(由于太大没有显示完整)
- path 书籍保存的地址
- schedule 阅读进度
用户设置项 - bgColor 背景颜色
- fontSize 字体大小
- fontFamily 字体类型
{
"books": [
{
"id": "4219785412",
"title": "浮生六记",
"creator": "(清)沈复著;朱奇志 校译",
"url": "data:image/jpeg;base64,",
"path": "./books/4219785412.epub",
"schedule": 0
}
],
"setting": {
"bgColor": 3,
"fontSize": 24,
"fontFamily": 3
}
}