Electron实现markdown笔记软件(二)

7 篇文章 0 订阅
7 篇文章 0 订阅

关于这个markdown笔记软件(二)——模型层设计

项目源码:
(https://github.com/andytt/ErtuilEditor

目录

关于这个markdown笔记软件(一)——总体的思路和介绍

关于这个markdown笔记软件(二)——模型层设计

关于这个markdown笔记软件(三)——视图层设计

关于这个markdown笔记软件(四)——md的渲染和生成

关于这个markdown笔记软件(五)——electron库

关于这个markdown笔记软件(六)——应用逻辑、electron对话框

关于这个markdown笔记软件(七)——其他细节、总结

数据库选择

之前也说过我们使用的是lowdb作为数据库处理,这个node.js非常小巧,只管理一个json文件。这对于一个小项目来说,是最合适不过的了。

安装

命令:

npm install lowdb --save

基本使用方法:

有关数据库对函数定义在./js/database.js文件中。
引入包:

var low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync')

链接数据库需要两部:

const adapter = new FileSync(db_path);
var db = low(adapter);

具体使用方法:

npm网可以看到具体的使用方法。

建立模型

目前的模型非常简单,在database中只有三个表:label,notes,info。

  • label:记录了标签名,拥有两个field,id、label_name
  • notes:具体记录了所有笔记,三个field,id、label_name、note_name
  • info:记录了标签和笔记的数量,label_num,note_num

下面代码给出了数据库初始化(只执行一次):

const adapter = new FileSync(db_path);
var db = low(adapter);
db.defaults({ label:[],notes:[],info:{} }).write();
db.get('label').push({id: 1,label_name :'default'}).write();
db.set('info.note_num',0).write();
db.set('info.label_num',1).write();

可以看到,对label表插入了默认标签,‘default’。

封装

database.js通过对外暴露以下函数,提供服务:

exports.db_get_node_number = db_get_node_number;
exports.db_change_label = db_change_label;
exports.db_init = db_init;
exports.db_insert_note = db_insert_note;
exports.db_get_labels = db_get_labels;
exports.db_get_notes_by_label = db_get_notes_by_label;
exports.db_get_note_by_name = db_get_note_by_name;
exports.db_get_id_by_name = db_get_id_by_name;
exports.db_change_node_name = db_change_node_name;
exports.db_remove_node = db_remove_node;
exports.db_insert_label = db_insert_label;
exports.db_remove_label = db_remove_label;

选择几个具体的函数给出代码:

function db_insert_note(db_path,name,label){
    const adapter = new FileSync(db_path);
    var db = low(adapter);
    if(db.get('notes').find({ note_name: name }).size().value() >=1 ){
        db.get('notes').find({ note_name: name }).assign({label_name : label}).write();
    }else{
        var id = db.get('info.note_num').value() + 1;
        db.get('notes').push({id: id,note_name : name ,label_name : label}).write();
        db.set('info.note_num',id).write();
    }
}

插入笔记,如果重名且label不一致,就修改label。

function db_change_node_name(db_path,old_name,new_name){
    const adapter = new FileSync(db_path);
    var db = low(adapter);
    db.get('notes').find({note_name:old_name}).assign({note_name:new_name}).write();
}

修改note的名字属性。

还有其他函数不再一一列举。

其他文件

基本原则

  • 数据库文件和其他文本文件全部放在项目的./data/文件夹下。其中每一个笔记都创建一个同名文件夹,存放.md和通过markdown解析生成的.html文件。
  • 如果有图片和其他文件,插入markdown时,会自动拷贝一份图片,并放在笔记同名文件夹下。引用复制的文件。
  • 对于输出的pdf文件,原本打算生成后直接输出,不再本地保存。由于生成pdf的包不支持中文文件名,所以先将.html复制到./data/output.html,再进行打印。

其中对本地文件的存储和html渲染,在buildMarkdown.js文件中的save_file()函数实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值