LZWcc's Blog

Back

🎯 项目目标#

实现一个 RESTful API,具备以下功能:

  1. 从数据库读取传感器数据
  2. 根据字段映射表动态转换字段名
  3. 返回格式化后的 JSON 数据给前端

🗄️ 数据库设计#

1. 传感器数据表(t_sensor_data#

用于存储传感器上报的原始数据:

CREATE TABLE `t_sensor_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `d_no` varchar(64) COMMENT '设备编码',
  `field1` varchar(255) COMMENT '预留字段1',
  `field2` varchar(255) COMMENT '预留字段2',
  `field3` varchar(255) COMMENT '预留字段3',
  `field4` varchar(255) COMMENT '预留字段4',
  `field5` varchar(255) COMMENT '预留字段5',
  -- ... field6-field10
  `c_time` datetime COMMENT '数据更新时间',
  `online` varchar(4) COMMENT '是否在线数据',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sql

2. 字段映射表(t_sensor_field_mapper#

用于定义物理字段与前端显示名称的映射关系:

CREATE TABLE `t_sensor_field_mapper` (
  `id` int(11) NOT NULL,
  `f_name` varchar(255) NOT NULL COMMENT '前端显示名称',
  `db_name` varchar(255) NOT NULL COMMENT '数据库字段名',
  `p_name` varchar(255) NOT NULL COMMENT '物理层属性名',
  `visible` varchar(4) COMMENT '是否可见 0:不可见 1:可见',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sql

启动MySQL服务#

brew services start mysql
-- 创建数据库
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS wusiqi CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
-- 写入数据库
mysql -u root -p wusiqi < wusiqi.sql   
shell

完整代码#

原始的 dataRows

处理后的数据:

[{
    '设备编码': '2021',
    '更新时间': 2024-06-29T12:13:59.000Z,
    '是否在线数据': '保存数据',
    '水质2': '67',
    '水温2': '43',
    '水质1': '45',
    '湿度': '23'
  },
...
]
shell

渲染到Element Plus表格组件#

<el-table :data="tableData" stripe style="width: 100%">
      <el-table-column
        v-for="key in tableHeader"
        :key="key"
        :prop="key"
        :label="key"
      />
</el-table>
shell

Object.keys(data[0]) 提取数据对象的所有键名(属性名), 当 prop 的值和数据对象的键名相同时,Element Plus 就能正确地取出对应的值

["设备编码", "更新时间", ”是否在线数据", ...]
plaintext

v-for 循环这些键名,生成多个 <el-table-column> 组件

// 数据对象的键
{
  "设备编码": "2021",  ← 键名
  "湿度": "12"         ← 键名
}

// 列组件的 prop
<el-table-column prop="设备编码" />  ← prop 值
<el-table-column prop="湿度" />      ← prop 值
javascript
使用 Node.js + Express + MySQL 实现动态字段映射的数据查询
https://lzwcc.xyz/blog/node-ques01/
Author LZWcc
Published at October 15, 2025
Comment seems to stuck. Try to refresh?✨