1. 程式人生 > >Electron實現markdown筆記軟體(二)

Electron實現markdown筆記軟體(二)

關於這個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()函式實現。

相關推薦

Electron實現markdown筆記軟體

關於這個markdown筆記軟體(二)——模型層設計 目錄 資料庫選擇 之前也說過我們使用的是lowdb作為資料庫處理,這個node.js非常小巧,只管理一個json檔案。這對於一個小專案來說,是最合適不過的了。

Electron實現markdown筆記軟體

關於這個markdown筆記軟體(一)——總體的思路和介紹 專案原始碼 目錄 介紹 一直想寫一個類似為知筆記、螞蟻筆記之類的用來記筆記的軟體。想來需要有這些需求: 要支援markdown。 markdo

Electron實現markdown筆記軟體

關於這個markdown筆記軟體(五)——應用邏輯、electron對話方塊 專案原始碼 目錄 主體邏輯 程式的主題邏輯在file_manage.js中定義。在程式中使用“標籤”,而不是“資料夾”來管理各個筆記,因

Electron實現markdown筆記軟體

關於這個markdown筆記軟體(三)——檢視層設計 專案原始碼 目錄 使用者介面渲染 使用者介面渲染主要是由根目錄下的的index.html和main.css實現渲染。 為了方便起見,主視窗固定大小,分為上下左

Node.js實現PC端類微信聊天軟體

Github StackChat 用到的React-Router React-Router是React路由的解決方案之一,也可以使用別的庫 安裝 npm install react-router --save-dev 路由配置 react-router主要提供了幾個元件來進行路由之間結構的組織

【SSH進階之路】Struts基本原理 + 實現簡單登錄

target doctype 掌握 pack insert enter snippet file manage 上面博文,主要簡單的介紹了一下SSH的基本概念,比較宏觀。作為剛開始學習的人可以有一個總體上的認識,個人覺得對學習有非常好的輔助功能,它不不過

HTML5+Canvas+jQuery調用手機拍照功能實現圖片上傳

customer mkdir 狀態保存 ont false lan else if 項目 action 上一篇僅僅講到前臺操作,這篇專門涉及到Java後臺處理。前臺通過Ajax提交將Base64編碼過的圖片數據信息傳到Java後臺,然後Java這邊進行接收處理。通過

Deep Learning論文筆記Sparse Filtering稀疏濾波

structure 分布 的確 tlab bolt 期望 有一個 尋找 mean Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波 自己平時看了一些論文,但老感覺看完過後就會慢慢的淡忘,某一天重新拾起來的時候又好像沒有

使用gluon實現簡單的CNN

bsp evaluate label exce ini rate ati sof name from mxnet import ndarray as nd from mxnet import gluon from mxnet import autograd from mx

使用Spring+MySql實現讀寫分離spring整合多數據庫

ont 依據 xml配置 實現 整合 配置 item 匹配 mic 緊接著上一章,因為現在做的項目還是以spring為主要的容器管理框架,所以寫以下spring如何整合多個數據源。 1. 背景 我們一般應用對數據庫而言都是“讀多寫少”,也就說對數據庫讀取數據的壓力比較大

Hive筆記整理

大數據 Hive [TOC] Hive筆記整理(二) Hive中表的分類 managed_table—受控表、管理表、內部表 表中的數據的生命周期/存在與否,受到了表結構的影響,當表結構被刪除的,表中的數據隨之一並被刪除。 默認創建的表就是這種表。 可以在cli中通過desc extended t

HBase筆記整理

大數據 HBase [TOC] HBase筆記整理(二) 邏輯結構 RowKey第一位 ColumnFamily ColumnQuiauer value(TimeStamps) Cell 物理結構 HMaster ----->NameNode 管理節點

【C++ Primer 筆記 變量

class tro ++ div bsp mail post c++ 系列 本系列文章由 Nick-Pem 原創編寫,轉載請說明出處。 作者:Nick-Pem  郵箱:[email protected] 留坑【C++ Primer 筆記

Kafka筆記整理:Kafka Java API使用

大數據 Kafka Java [TOC] Kafka筆記整理(二):Kafka Java API使用 下面的測試代碼使用的都是下面的topic: $ kafka-topics.sh --describe hadoop --zookeeper uplooking01:2181,uplooking0

Redis筆記整理:Java API使用與Redis分布式集群環境搭建

數據庫 NoSQL Redis [TOC] Redis筆記整理(二):Java API使用與Redis分布式集群環境搭建 Redis Java API使用(一):單機版本Redis API使用 Redis的Java API通過Jedis來進行操作,因此首先需要Jedis的第三方庫,因為使用的是M

Eigen庫筆記整理

向量 pre geo 直接 gpo 歐拉角 () blog 初始化 Eigen/Geometry 模塊提供了各種旋轉和平移的表示 旋轉矩陣直接使用 Matrix3d 或 Matrix3f Eigen::Matrix3d rotation_matrix = Eigen::M

ElasticSearch筆記整理:CURL操作、ES插件、集群安裝與核心概念

大數據 ElasticSearch ELK [TOC] CURL操作 CURL簡介 curl是利用URL語法在命令行方式下工作的開源文件傳輸工具,使用curl可以簡單實現常見的get/post請求。簡單的認為是可以在命令行下面訪問url的一個工具。在centos的默認庫裏面是有curl工具的,如

Storm筆記整理:Storm本地開發案例—總和計算與單詞統計

大數據 實時計算 Storm [TOC] 概述 在Strom的API中提供了LocalCluster對象,這樣在不用搭建Storm環境或者Storm集群的情況下也能夠開發Storm的程序,非常方便。 基於Maven構建工程項目,其所需要的依賴如下: <dependency>

Scala筆記整理:Scala數據結構—數組、map與tuple

大數據 Scala [TOC] 數組 定長數組 如果你需要一個長度不變的數組,可以用Scala中的Array。例如: val numsArray = new Array[Int] (30) //長度為30的整數數組,所有元素初始化為0 val stringArrays = new Array [St

Spark筆記整理:RDD與spark核心概念名詞

大數據 Spark [TOC] Spark RDD 非常基本的說明,下面一張圖就能夠有基本的理解: Spark RDD基本說明 1、Spark的核心概念是RDD (resilient distributed dataset,彈性分布式數據集),指的是一個只讀的,可分區的分布式數據集,這個數據集的全