Node.js Electron构建桌面应用、获取实时数据并用echarts绘制图表
时间: 2025-03-10 17:07:37 浏览: 64
### 使用 Node.js 和 Electron 构建桌面应用并实现 ECharts 图表实时数据展示
#### 项目初始化与环境搭建
为了创建基于 Node.js 的 Electron 应用程序,首先需要安装必要的开发工具。通过 npm 初始化新项目,并安装 electron 及其他依赖项。
```bash
npm init -y
npm install --save-dev electron concurrently wait-on
```
这一步骤确保了基础框架的建立[^1]。
#### 创建主进程文件 `main.js`
该文件负责启动浏览器窗口以及管理整个应用程序生命周期事件。下面是一个简单的例子:
```javascript
const { app, BrowserWindow } = require('electron');
const path = require('path');
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: true
}
});
win.loadFile('index.html');
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
```
此代码片段展示了如何配置基本的应用设置和行为逻辑[^2]。
#### 开发前端页面及集成 ECharts
在项目的根目录下新建 HTML 文件作为渲染界面的一部分,在其中加载 echarts.min.js 来支持图表绘制功能。同时利用 Vue 或 React 等现代 JavaScript 框架来简化组件化开发过程[^4]。
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Electron App with Real-time Data and Charts</title>
<script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
<!-- 如果使用Vue -->
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app">
<!-- Chart container -->
<div ref="chartContainer" style="width: 600px;height:400px;"></div>
</div>
<script type="module">
import { defineComponent, onMounted, ref } from 'vue';
export default defineComponent({
setup() {
let chartInstance = null;
function drawChart(dataPoints){
// Initialize or update the existing instance of a chart.
if (!chartInstance) {
chartInstance = echarts.init(document.querySelector('#app div'));
var option = {
xAxis: {},
yAxis: {},
series: [{
name:'Data',
type:'line',
data:dataPoints
}]
};
chartInstance.setOption(option);
} else {
// Update options directly when there's already an initialized chart object available.
chartInstance.setOption({series:[{data:dataPoints}]})
}
}
onMounted(async ()=>{
try{
while(true){
await fetch('/api/getRealTimeData')
.then(response=>response.json())
.then(json=>drawChart(json.data));
setTimeout(()=>{}, 5 * 1000); // Poll every five seconds for updates.
}
} catch(error){ console.error(`Error fetching real time data`, error)}
})
}
})
</script>
</body>
</html>
```
上述代码实现了网页端接收来自服务器推送的新鲜统计数据并通过调用 ECharts API 方法动态更新视图的效果[^3]。
#### 后台服务提供 RESTful 接口供客户端请求最新信息
最后,在后台编写 Express Server 提供给前端访问的服务接口。这里假设有一个模拟数据库存储着时间序列形式的历史记录;每当收到 GET 请求时就返回最近一段时间内的观测值给调用者。
```javascript
// server.js
require('dotenv').config(); // Load environment variables from .env file into process.env
const express = require('express');
const cors = require('cors'); // Middleware to enable Cross-Origin Resource Sharing policy.
let simulatedDatabase = []; // Simulated database holding historical records over some period.
for(let i=0; i<100 ;i++){
simulatedDatabase.push(Math.random()*100);
}
setInterval(()=>{
simulatedDatabase.shift();
simulatedDatabase.push((Math.random()-0.5)*10+simulatedDatabase[simulatedDatabase.length-1]);
}, 5*1000);
const PORT = parseInt(process.env.PORT || 3000);
const app = express();
app.use(cors());
app.get('/api/getRealTimeData',(req,res)=>{
res.status(200).json({"status":"success","message":"","data":simulatedDatabase.slice(-20)});
})
app.listen(PORT,()=>console.log(`Server running at http://localhost:${PORT}`))
```
这段脚本定义了一个简易版的时间序列API,它每隔五秒会自动生成新的随机数值追加到列表末端,并移除最旧的一项以保持固定长度。当接收到 HTTP GET 请求 `/api/getRealTimeData` 时,则截取最新的二十条记录发送回响应体中。
阅读全文
相关推荐


















