You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助influxdb-nodejs将InfluxDB数据在Highcharts中展示?

从InfluxDB取数到Highcharts可视化完整方案

你已经搞定了InfluxDB数据查询的核心环节,接下来只需要把数据通过Node.js接口传递给前端,再用Highcharts完成渲染就行,我给你拆解成具体步骤:

1. 完善Node.js后端:提供数据接口

首先我们需要把你现有的查询逻辑包装成一个HTTP接口,方便前端调用。这里用Express框架来实现,步骤如下:

  • 先安装依赖:
npm install express influxdb-nodejs
  • 然后修改你的代码,做成接口:
const express = require('express');
const Influx = require('influxdb-nodejs');
const app = express();
const port = 3000;

const client = new Influx('http://127.0.0.1:8086/aTimeSeries');

// 提供获取最新数据的接口
app.get('/api/latest-data', async (req, res) => {
  try {
    const data = await client.queryRaw('select * from "valeurs" group by * order by desc limit 1');
    // 解析数据:提取时间戳和数值
    const series = data.results[0].series[0];
    const [timeStr, valeur] = series.values[0];
    const timestamp = Date.parse(timeStr);
    // 返回前端需要的格式
    res.json({
      timestamp,
      valeur
    });
  } catch (err) {
    console.error('查询InfluxDB出错:', err);
    res.status(500).json({ error: '获取数据失败' });
  }
});

// 允许跨域(如果前端和后端端口不同的话)
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET');
  next();
});

app.listen(port, () => {
  console.log(`后端服务运行在 http://localhost:${port}`);
});

2. 前端页面:用Highcharts渲染数据

接下来创建一个HTML页面,引入Highcharts,然后请求后端接口获取数据并渲染图表:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>InfluxDB数据可视化</title>
  <!-- 引入Highcharts -->
  <script src="https://code.highcharts.com/highcharts.js"></script>
</head>
<body>
  <!-- 图表容器 -->
  <div id="chart-container" style="width: 800px; height: 400px;"></div>

  <script>
    // 初始化图表
    const chart = Highcharts.chart('chart-container', {
      title: {
        text: 'InfluxDB最新数据展示'
      },
      xAxis: {
        type: 'datetime',
        title: {
          text: '时间'
        }
      },
      yAxis: {
        title: {
          text: '数值'
        }
      },
      series: [{
        name: 'Valeur',
        data: [] // 初始空数据,后续填充
      }]
    });

    // 请求后端数据并更新图表
    function fetchLatestData() {
      fetch('http://localhost:3000/api/latest-data')
        .then(res => res.json())
        .then(data => {
          // 添加新数据点,超过10个时自动移除最旧的点
          chart.series[0].addPoint([data.timestamp, data.valeur], true, chart.series[0].data.length > 10);
        })
        .catch(err => console.error('获取数据失败:', err));
    }

    // 页面加载时先获取一次数据
    fetchLatestData();
    // 每5秒刷新一次数据
    setInterval(fetchLatestData, 5000);
  </script>
</body>
</html>

3. 运行测试

  1. 启动后端服务:node your-server-file.js(把your-server-file.js换成你实际的后端文件名)
  2. 直接打开前端HTML页面,就能看到Highcharts实时展示InfluxDB的最新数据了

补充说明

  • 如果需要展示历史数据,只需要修改后端的InfluxDB查询语句(比如去掉limit 1,改成where time > now() - 1h查询最近1小时的数据),然后把返回的数据处理成[[timestamp1, valeur1], [timestamp2, valeur2], ...]格式,直接赋值给chart.series[0].data即可。
  • 生产环境中,建议调整CORS配置,不要用*允许所有域名访问,改成你实际的前端域名。

内容的提问来源于stack exchange,提问作者carak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:11:25