物联网中的 Node-RED(5):HTTP 节点(REST 接口与 Webhook)
物联网中的 Node-RED(5):HTTP 节点(REST 接口与 Webhook)
Node-RED 里"对外喊话、对外露接口"就靠 HTTP 那一组节点。你的双服务端推送、AI 摄像头报警回调,本质都是 HTTP 节点在干活。
一、是什么
HTTP 相关节点有两类,别混:
- http request(请求端):主动调别人的 REST API,相当于代码里的
HttpClient。配置好 method(GET/POST…)、URL、返回格式(JSON / 字符串 / 二进制),上游 msg 的payload或url/headers会驱动它。 - http in + http response(服务端正):在 Node-RED 本地起一个 HTTP 服务,监听某个路径和方法(如
POST /webhook/alarm),收到请求后经 function 处理,再用 http response 把结果写回去。没有 http response,请求方会一直挂着超时。
一句话:request = 去调别人;in/response = 让别人来调你(Webhook 接收端)。
二、怎么用
调外部接口(双服务端推送的核心)
- 拖
http request,Method 选 POST,URL 填你的第一个服务端地址。 - 上游 function 把设备数据组装成
msg.payload = { deviceId, ts, value }。 - Return 选
a parsed JSON object,方便后面判断返回码。 - 收到后接
switch看msg.statusCode === 200才认为成功,失败走重发/告警。 - 第二个服务端同理再接一条流(星球的"双服务端推送"就这么来的)。
露本地接口(接收 AI 摄像头报警)
- 拖
http in,Method=POST,URL=/alarm/camera。 - 后面接
function解析msg.payload(摄像头 POST 来的 JSON:报警类型、置信度、图片 URL)。 - 处理完拖
http response,Status Code 填 200,Body 随便回个{"ok":true}。 - 务必加 catch,否则摄像头重试会把流卡死。
三、用在哪里
- 双服务端推送:Node-RED 把同一份设备数据 POST 到你的两个服务端,互为备份。
- AI 摄像头报警回调:摄像头识别到滑坡/入侵 → POST 给 Node-RED 的 http in → 解析 → 转 MQTT/再推平台。
- 调用第三方开放 API:天气、地图、短信网关,用 http request 拉数据进流。
- 给前端/大屏供数据:http in 暴露一个
GET /latest返回最新测点,前端轮询或转发。
四、怎么能用好(避坑)
- 设超时 + 重试:http request 有 Timeout 参数(秒),公网别用默认 0(一直等)。失败用
delay+loop或function计数器做有限次重试,别无限重发。 - 先判状态码:别拿到
payload就当成功,msg.statusCode非 2xx 要分流处理。 - Body 解析要对:摄像头 POST 来的可能是
application/json(直接是对象),也可能是form或原始字符串,function 里先typeof msg.payload再处理。 - HTTPS 证书:调公网 API 记得开 TLS;内网自签证书可能要关校验(仅内网可接受)。
- 鉴权头:服务端要 token,就在 http request 的 Headers 里加
Authorization: Bearer xxx,别写进 URL。 - http in 端口别撞:默认 1880 是编辑器,自己起的接口换端口或加路径前缀,避免和别的进程抢。
- Webhook 必须鉴权:暴露
/alarm这种接口,至少校验来源 IP 或签名,别裸奔。
五、原理
http request底层是 Node.js 的http/https模块,msg.url/msg.payload/msg.headers覆盖节点配置;返回写入msg.payload,状态码在msg.statusCode。http in基于 Node-RED 内置的 Express 路由,按URL + Method注册端点;收到请求把 body 放进msg.payload、msg.req/msg.res持有原生对象,http response 最终调用res.send()结束这次请求。- 因为是事件驱动,请求进来就走流,不阻塞别的节点——这也是它能扛并发回调的原因。
六、背景:它从哪里来
HTTP 是 1989–1991 年 Tim Berners-Lee 在 CERN 发明的(详见系列二第10篇),Node-RED 把它封装成可视化节点(基于 Express + Node http 客户端)。在 IoT 里,HTTP 天生适合"低频管理、事件回调、跨网穿透"——你的双服务端推送和摄像头报警正是这种场景,高频采集还是交给 MQTT/CoAP(系列二第09、11篇)。
误区澄清
- "HTTP 节点 = 完整 Web 服务器":错。它只露你配的几个路由,没有静态托管、没有完整中间件栈,别拿它当 Nginx。
- "调通一次就稳了":错。公网会超时、服务端会重启、token 会过期,必须加超时/重试/状态码判断。
- "Webhook 不用鉴权,内网没事":错。很多摄像头/平台回调能被伪造,至少校验来源或签名。
- "POST 来的 payload 一定是 JSON 对象":错。可能是字符串或表单,不判类型直接
.field会报错把流打挂。

浙公网安备 33010602011771号