存储用户数据库使用了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 } }