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

如何将Node JS编写的MQTT发布/订阅端封装为API支持PostMan调用

实现方案

你可以基于Express搭建HTTP服务,将MQTT客户端逻辑与HTTP路由绑定,对外提供REST API,部署到公网服务器后即可通过Postman调用。

步骤1:安装依赖

首先初始化Node项目,安装所需三方包:

npm init -y
npm install express mqtt cors

步骤2:编写整合服务代码

不用单独维护Publisher和Subscriber两个文件,直接整合到API服务中即可,示例代码如下:

const express = require('express');
const cors = require('cors');
const mqtt = require('mqtt');

const app = express();
const PORT = 3000;

// 中间件配置
app.use(cors());
app.use(express.json());

// MQTT客户端初始化
const mqttClient = mqtt.connect('mqtt://broker.hivemq.com');
// 存储订阅到的消息,生产环境可替换为数据库
const receivedMessages = [];

// MQTT连接成功回调
mqttClient.on('connect', () => {
  console.log('MQTT客户端连接成功');
  // 订阅需要监听的主题,可根据需求扩展动态订阅
  mqttClient.subscribe('connected');
  // 可在此处追加其他需要订阅的主题
});

// MQTT接收消息回调
mqttClient.on('message', (topic, message) => {
  const msg = message.toString();
  receivedMessages.push({
    topic,
    payload: msg,
    timestamp: new Date().toISOString()
  });
  // 原有业务逻辑可以保留
  if(topic === "connected"){
    // handleGarageConnected(message) 此处保留你原来的处理逻辑即可
  }
});

// 发布MQTT消息接口
app.post('/api/mqtt/publish', (req, res) => {
  const { topic, payload } = req.body;
  if(!topic || payload === undefined) {
    return res.status(400).json({code: 400, msg: '参数缺失,topic和payload为必填项'});
  }
  mqttClient.publish(topic, payload.toString(), (err) => {
    if(err) {
      return res.status(500).json({code: 500, msg: '消息发布失败', error: err.message});
    }
    res.json({code: 200, msg: '消息发布成功'});
  });
});

// 获取订阅到的消息接口
app.get('/api/mqtt/messages', (req, res) => {
  res.json({code: 200, data: receivedMessages});
});

// 启动服务
app.listen(PORT, () => {
  console.log(`API服务启动成功,监听端口${PORT}`);
});

步骤3:部署与Postman调用

  • 把代码部署到公网可访问的服务器,启动服务:node server.js,确保服务器安全组开放3000端口
  • 发布消息测试:在Postman中新建POST请求,地址为http://你的服务器公网IP:3000/api/mqtt/publish,请求体选择JSON格式,传入参数:
{
  "topic": "你要发布的主题",
  "payload": "你要发送的消息内容"
}

发送请求即可触发MQTT消息发布。

  • 查看订阅消息测试:新建GET请求,地址为http://你的服务器公网IP:3000/api/mqtt/messages,发送请求即可获取服务端订阅到的所有MQTT消息。

注意事项

  • 生产环境需要为API添加鉴权逻辑,比如请求头携带校验密钥,避免接口被恶意调用
  • 可根据需求扩展接口,比如新增动态订阅主题、清空消息、查询指定主题消息等能力
  • MQTT连接可以添加断开重连逻辑,避免网络波动导致服务不可用
  • 消息存储如果需要持久化,可以替换数组为Redis、MySQL等存储组件
  • 如果使用私有MQTT broker,需要在mqtt.connect方法中传入用户名、密码等校验参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:39:03