Mermaid流程圖可視化系統:基于Spring Boot與Node.js的三層架構實現

  • 什么是Mermaid?
  • 系統架構設計
    • 三層架構 overview
    • 架構交互流程
  • 核心組件詳解
    • 1. Spring Boot后端
    • 2. Node.js中間層
    • 3. 前端界面
  • 功能實現
    • 1. 節點和關系管理
    • 2. 流程圖渲染
    • 3. 主題切換
    • 4. 導出功能
  • 使用指南
    • 啟動步驟
    • 頁面操作
  • 總結與展望

什么是Mermaid?

Mermaid流程圖可視化系統是一個支持動態創建、管理和展示流程圖的Web應用。Mermaid 是一個基于 JavaScript 的圖表和制圖工具,使用 Markdown 風格的文本定義和渲染器來創建和修改復雜的圖表。Mermaid 的主要目的是幫助文檔跟上開發進度。

官方語法鏈接

系統架構設計

三層架構 overview

該系統采用現代化的三層架構設計,結合了Spring Boot的數據處理能力、Node.js的輕量級中間層優勢以及Mermaid庫的流程圖繪制功能,實現了一個功能完整、交互友好的流程圖可視化解決方案。

├── html-frontend
│   └── index.html
├── img
│   ├── mermaid-diagram.png
│   └── mermaid流程圖測試.png
├── nodejs-middleware
│   ├── package.json
│   └── server.js
├── README.md
└── springboot-backend├── pom.xml├── src└── target

系統采用經典的三層架構設計,各層職責明確、松耦合:

  1. 前端展示層:基于純HTML、JavaScript和Tailwind CSS構建,負責用戶交互和流程圖展示
  2. 中間層:基于Node.js和Express框架實現,處理前端請求并轉發給后端
  3. 后端服務層:基于Spring Boot構建,負責數據持久化和業務邏輯處理
架構交互流程
用戶操作 → 前端界面 → Node.js中間層 → Spring Boot后端 → 數據庫

在這里插入圖片描述

核心組件詳解

1. Spring Boot后端

后端采用Spring Boot 2.7.0構建,主要負責數據的持久化和業務邏輯處理:

  • 數據訪問層:使用Spring Data JPA實現對實體的CRUD操作
  • Web層:通過Spring Web和WebFlux提供RESTful API
  • 數據庫:使用H2內存數據庫存儲圖形數據,便于快速開發和演示
  • 技術棧:Java 11, Spring Boot, Spring Data JPA, Spring WebFlux, H2 Database

根據springboot-backend/pom.xml文件,后端依賴配置清晰,包含了必要的Web、數據訪問和測試組件。

書寫請求接口:

@RestController
@RequestMapping("/api/graph")
@CrossOrigin(origins = "http://localhost:3000") // 允許跨域訪問
public class GraphController {@Autowiredprivate NodeRepository nodeRepository;@Autowiredprivate RelationshipRepository relationshipRepository;// 節點相關接口@GetMapping("/nodes")public List<Node> getAllNodes() {return nodeRepository.findAll();}@PostMapping("/nodes")public Node createNode(@RequestBody Node node) {return nodeRepository.save(node);}// 關系相關接口@GetMapping("/relationships")public List<Relationship> getAllRelationships() {return relationshipRepository.findAll();}@PostMapping("/relationships")public Relationship createRelationship(@RequestBody Relationship relationship) {return relationshipRepository.save(relationship);}// 獲取完整圖形數據@GetMappingpublic ResponseEntity<Map<String, Object>> getFullGraph() {Map<String, Object> graphData = new HashMap<>();graphData.put("nodes", nodeRepository.findAll());graphData.put("relationships", relationshipRepository.findAll());return new ResponseEntity<>(graphData, HttpStatus.OK);}
}
2. Node.js中間層

中間層基于Node.js和Express框架實現,主要職責是轉發前端請求到后端,并處理跨域問題:

  • 服務器:使用Express創建輕量級Web服務器,監聽3000端口
  • API代理:通過Axios轉發請求到Spring Boot后端(默認地址:http://localhost:8080/api/graph)
  • 中間件:使用CORS中間件處理跨域請求,使用express.json()解析JSON請求體
  • 技術棧:Node.js, Express, Axios, CORS

/nodejs-middleware/server.js可以看出,中間層提供了三個主要API端點:

  • GET /api/graph:獲取完整圖形數據
  • POST /api/nodes:創建新節點
  • POST /api/relationships:創建新關系

書寫中間層請求:

const express = require('express');
const axios = require('axios');
const cors = require('cors');const app = express();
const PORT = 3000;
const SPRING_BOOT_API_URL = 'http://localhost:8080/api/graph';// 中間件配置
app.use(cors());
app.use(express.json());// 獲取完整圖形數據
app.get('/api/graph', async (req, res) => {try {const response = await axios.get(SPRING_BOOT_API_URL);res.json(response.data);} catch (error) {console.error('獲取圖形數據失敗:', error);res.status(500).json({ error: '獲取圖形數據失敗' });}
});// 創建新節點
app.post('/api/nodes', async (req, res) => {try {const response = await axios.post(`${SPRING_BOOT_API_URL}/nodes`, req.body);res.json(response.data);} catch (error) {console.error('創建節點失敗:', error);res.status(500).json({ error: '創建節點失敗' });}
});// 創建新關系
app.post('/api/relationships', async (req, res) => {try {const response = await axios.post(`${SPRING_BOOT_API_URL}/relationships`, req.body);res.json(response.data);} catch (error) {console.error('創建關系失敗:', error);res.status(500).json({ error: '創建關系失敗' });}
});// 啟動服務器
app.listen(PORT, () => {console.log(`Node.js中間層服務器運行在 http://localhost:${PORT}`);
});
3. 前端界面

前端基于純HTML實現,結合了多種現代化前端技術:

  • UI框架:使用Tailwind CSS實現響應式布局和美觀的UI組件
  • 圖標庫:使用Font Awesome提供直觀的圖標
  • 流程圖繪制:使用Mermaid 10.9.1庫繪制流程圖
  • 導出功能:使用html2canvas和FileSaver.js實現流程圖PNG導出
  • 主題切換:支持默認、深色、森林和中性四種主題

html-frontend/index.html可以看出,前端實現了完整的用戶交互界面,包括節點和關系的添加、流程圖刷新、數據清空、主題切換和導出功能。

前端頁面主要是對流程圖節點和關系的新增,以及流程圖的展示

功能實現

1. 節點和關系管理

系統支持節點和關系的創建和管理:

  • 節點管理:支持添加節點,設置節點名稱和類型
  • 關系管理:支持在兩個節點之間添加帶有標簽的關系
  • 數據同步:所有操作實時同步到后端存儲
  • 統計展示:實時顯示節點和關系的數量統計
2. 流程圖渲染

使用Mermaid庫實現流程圖的動態渲染:

  • 自動布局:Mermaid自動計算節點位置,確保流程圖美觀
  • 可定制樣式:支持通過主題切換改變流程圖的整體風格
  • 響應式設計:流程圖會根據容器大小自動調整
3. 主題切換

系統支持四種不同的主題風格:

  • 默認主題:基于紫色系的默認風格
  • 深色主題:深色背景,適合長時間查看
  • 森林主題:綠色系主題,清新自然
  • 中性主題:基于灰色系的簡約風格
4. 導出功能

支持將流程圖導出為PNG圖片:

  • 高質量渲染:使用html2canvas確保導出圖片質量
  • 便捷保存:通過FileSaver.js直接保存到本地

使用指南

啟動步驟
  1. 啟動Spring Boot后端

    cd springboot-backend
    mvn spring-boot:run
    

    服務將運行在 http://localhost:8080

  2. 啟動Node.js中間層

    cd nodejs-middleware
    npm install
    npm start
    

    服務將運行在 http://localhost:3000

  3. 啟動前端頁面

    cd html-frontend
    python -m http.server 8001
    

    訪問 http://localhost:8001 即可使用系統

頁面操作
  1. 添加節點:填寫節點名稱和類型,點擊"添加節點"按鈕
  2. 添加關系:選擇源節點和目標節點,填寫關系標簽,點擊"添加關系"按鈕
  3. 刷新流程圖:點擊"刷新流程圖"按鈕更新流程圖顯示
  4. 切換主題:點擊主題選擇器中的不同主題按鈕
  5. 下載流程圖:點擊"下載PNG"按鈕將流程圖保存為圖片

總結與展望

本項目通過三層架構的設計,充分發揮了各層技術的優勢:Spring Boot提供了強大的數據處理能力,Node.js中間層實現了輕量級的請求轉發,前端則通過Mermaid庫實現了直觀的流程圖可視化。系統功能完整,交互友好,適合用于流程圖的快速創建和展示。

未來可以考慮以下改進方向:

  1. 數據持久化:替換H2內存數據庫為MySQL或PostgreSQL等持久化數據庫
  2. 用戶認證:添加用戶認證和授權功能
  3. 流程圖模板:提供常用流程圖模板,方便用戶快速創建
  4. 實時協作:添加多人實時協作編輯功能
  5. 更多導出格式:支持導出為PDF、SVG等更多格式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92093.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

R 數據框:高效數據處理與分析的利器

R 數據框:高效數據處理與分析的利器 引言 在數據科學和統計分析領域,R語言因其強大的數據處理能力和豐富的統計模型而備受推崇。R數據框(data frame)是R語言中一種重要的數據結構,它以表格形式存儲數據,使得數據的組織、操作和分析變得簡單高效。本文將深入探討R數據框…

論文閱讀筆記:《Curriculum Coarse-to-Fine Selection for High-IPC Dataset Distillation》

論文閱讀筆記&#xff1a;《Curriculum Coarse-to-Fine Selection for High-IPC Dataset Distillation》1.背景與動機2.核心貢獻3.方法詳解4.實驗結果與貢獻主體代碼算法整體邏輯CVPR25 github 一句話總結&#xff1a; CCFS基于組合范式&#xff08;軌跡匹配選擇真實圖像&…

【Linux系統】詳解,進程控制

前言&#xff1a; 上文我們講到了Linux中的虛擬空間地址&#xff0c;知道了一個進程對應一個虛擬地址空間&#xff0c;虛擬空間地址與物理地址之間通過頁表映射....【Linux】虛擬地址空間-CSDN博客 本文我們來講一講Linux系統是如何控制進程的&#xff01; 如果喜歡本期文章&am…

Matplotlib(五)- 繪制子圖

文章目錄一、子圖概述1. 子圖介紹2. 子圖布局2.1 網格布局2.2 自由布局二、繪制等分區域子圖1. 使用 plt.subplot() 繪制子圖示例&#xff1a;繪制多個子圖示例&#xff1a;工業月度同比情況2. 使用 plt.subplots() 繪制子圖示例&#xff1a;繪制多個子圖示例&#xff1a;部分國…

C++中互斥鎖、共享鎖深度解析

一&#xff0c;互斥鎖互斥鎖&#xff08;Mutex&#xff0c;全稱 Mutual Exclusion&#xff09;是并發編程中用于保護共享資源的核心同步機制。它通過確保同一時間僅有一個線程訪問臨界區&#xff08;Critical Section&#xff09;&#xff0c;解決多線程環境下的數據競爭和不一…

Qt中的QWebSocket 和 QWebSocketServer詳解:從協議說明到實際應用解析

前言 本篇圍繞 QWebSocket 和 QWebSocketServer&#xff0c;從協議基礎、通信模式、數據傳輸特點等方面展開&#xff0c;結合具體接口應用與實戰案例進行說明。 在實時網絡通信領域&#xff0c;WebSocket 技術以其獨特的全雙工通信能力&#xff0c;成為連接客戶端與服務器的重要…

機器學習 —— 決策樹

機器學習 —— 決策樹&#xff08;Decision Tree&#xff09;詳細介紹決策樹是一種直觀且易于解釋的監督學習算法&#xff0c;廣泛應用于分類和回歸任務。它通過模擬人類決策過程&#xff0c;將復雜問題拆解為一系列簡單的判斷規則&#xff0c;最終形成類似 “樹” 狀的結構。以…

車規MCU軟錯誤防護技術的多維度分析與優化路徑

摘要&#xff1a;隨著汽車電子技術的飛速發展&#xff0c;微控制單元&#xff08;MCU&#xff09;在汽車電子系統中的應用日益廣泛。然而&#xff0c;大氣中子誘發的單粒子效應&#xff08;SEE&#xff09;對MCU的可靠性構成了嚴重威脅。本文深入探討了軟錯誤防護技術在車規MCU…

原生微信小程序實現語音轉文字搜索---同聲傳譯

效果展示 ![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/23257ce3b6c149a1bb54fd8bc2a05c68.png#pic_center 注意&#xff1a;引入同聲傳譯組件請看這篇文章 1.search.wxml <view class"search-page"><navigation-bar title"搜索" …

Wireshark安裝過程缺失vc_runtimeMinimum_x64.msi文件,安裝 Visual C++ Redistributable

一、我大意了 一開始是Npcap裝不上。 在這個網站下的&#xff1a; Wireshark (kafan58.com) 安裝程序&#xff1a; 安裝過程&#xff1a; 無語死了&#xff0c;感覺被騙了......外網下的才是最正版的。 二、外網正版 下載最新的4.4.8版本Wireshark重新安裝 2.1 vc_runtime…

高通平臺Wi-Fi Display學習-- 調試 Wi-Fi Display 問題

4.1 調試 WFD 性能 4.1.1 通過啟用調節器模式驗證 WFD 當系統設為調節器模式時,設備的運行時鐘將達到峰值。要在系統中啟用調節器模式,應 在序列中輸入以下命令: 1. adb shell stop mpdecision 2. adb shell echo 1→/sys/devices/system/cpu/cpu1/online 3. adb shell…

5G專網與SD-WAN技術融合:某飲料智能工廠網絡架構深度解析

隨著工業互聯網的快速發展&#xff0c;制造業正從傳統的生產模式向智能化、數字化方向轉型。某飲料智能工廠項目創新性地引入了5G專網與SD-WAN技術&#xff0c;形成了“連接-計算-應用-安全”的全鏈條網絡架構。本文將深入剖析這兩種技術在智能工廠中的應用場景、部署架構&…

Java項目:基于SSM框架實現的公益網站管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+答辯PPT+遠程部署】

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本公益網站就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息&#x…

向華為學習——IPD流程體系之IPD術語

第一章 IPD體系 1.1集成產品開發IPD Integrated Product Development,IPD是一種領先的、成熟的產品開發的管理思想和管理模式。它是根據大量成功的產品開發管理實踐總結出來的,并被大量實踐證明的高效的產品開發模式。通過IPD,可建立起基于市場和客戶需求驅動的集成產品開…

落霞歸雁:從自然之道到“存內計算”——用算法思維在芯片里開一條“數據高速航道”

作者 落霞歸雁&#xff08;CSDN首發&#xff0c;轉載請注明&#xff09; 段落一 現象&#xff1a;當“摩爾”老去&#xff0c;數據卻在狂奔 過去 30 年&#xff0c;CPU 頻率翻了 60 倍&#xff0c;而 DRAM 帶寬只翻了 20 倍。算力與帶寬的剪刀差&#xff0c;讓“計算”變成“等…

StyleX:Meta推出的高性能零運行時CSS-in-JS解決方案

簡介 StyleX 是由 Meta 開發的零運行時 CSS-in-JS 解決方案&#xff0c;在構建時將樣式編譯為靜態 CSS&#xff0c;消除運行時開銷。 核心特性 零運行時開銷 – 構建時編譯為靜態 CSS類型安全 – 完整的 TypeScript 支持原子化 CSS – 自動生成原子化類名&#xff0c;最小化…

LINUX 85 SHElL if else 前瞻 實例

問題 判斷用戶是否存在 id user id $user變量判斷vsftpd軟件包被安裝 rpm -q vsftpd rpm -ql vsftpd >& null[rootweb ~]# rpm -ql vsftpd >/dev/null 2>&1 您在 /var/spool/mail/root 中有郵件yum install vsftpd 內核主版本判斷 uname -rcut -d[rootweb ~]#…

2025 年非關系型數據庫全面指南:類型、優勢

非關系型數據庫的分類與特點隨著數據量呈指數級增長和數據類型日益多樣化&#xff0c;傳統關系型數據庫在處理海量非結構化數據時面臨著嚴峻挑戰。非關系型數據庫&#xff08;NoSQL&#xff09;應運而生&#xff0c;它摒棄了傳統關系模型的約束&#xff0c;采用更靈活的數據存儲…

深度殘差網絡ResNet結構

Deep Residual Learning for Image Recognition&#xff0c;由Kaiming He、Xiangyu Zhang、Shaoqing Ren和Jian Sun于2016年發表在CVPR上 1512.03385 (arxiv.org)https://arxiv.org/pdf/1512.03385 下圖中&#xff0c;左側為VGG19網絡&#xff0c;中間為34層的普通網絡&#xf…

python筆記--socket_TCP模擬瀏覽器實現

""" 1,導包 2,創建TCP套接字 3,建立連接 4,拼接客戶端請求報文 5,發送請求報文 6,接收響應報文 7,過濾出html頁面 8,保存為html文件 9,關閉套接字 """ # 1,導包 import socket # 2,創建TCP套接字 tcp_socketsocket.socket(socket.AF_INET,socket…