node.js - 无法通过 HTTP API 将流发布到 Node-RED,但在手动执行时可以使用
问题描述
我正在尝试使用 Node-RED API 通过以下命令发布流:
curl -ss -X POST \
http://${IP_ADDRESS}:1880/flow \
-H 'content-type: application/json' \
--data-binary "@foo_nodered_flow.json"
(根据此处的 API 文档:https ://nodered.org/docs/api/admin/methods/post/flow/ )
但我收到了这条消息:
{"error":"unexpected_error","message":"Error: duplicate id"}
流量或多或少:
- MQTT 订阅者
- 在 Javascript 中转换消息的函数
- 与 InfluxDB 的连接以存储这些转换后的消息(为此,我
node-red-contrib-influxdb
在~/.node-red/
https://flows.nodered.org/node/node-red-contrib-influxdb中安装了一个自定义 npm 包)
id
使用 grep 时,我没有在该字段中找到重复的 ID grep -nrI id foo_nodered_flow.json
。
我能够通过 HTTP POST 发布一个类似的流程,该流程不涉及 InfluxDB,而是一个简单的文件编写器。
- 为什么我在 HTTP 响应中收到该错误?这个流量有什么问题?
- 如何以编程方式使用 发布任何流
curl
?
包含流的文件具有以下结构:
{
"label": "Store redings - panel flow",
"nodes": [ <put here the flow you export from the Node-RED UI> ],
"configs": []
}
确保nodes
从包含流名称的类型节点中清除列表,"type": "tab"
例如"label": "Flow 1"
(此标签必须作为第一个字段超出nodes
数组,如上例所示)。
我还尝试删除顶级id
字段和所有z
似乎被自动替换/修复的字段。但我仍然得到同样的错误。
我知道这个流程有效,因为当我手动创建它时,我能够看到数据流动并最终存储在 InfluxDB 中。
此外,当在 Node-RED UI (at http://${THE_IP_ADDRESS}:1880/
) 上时,我可以单击“3 行菜单”> Import > Clipboard,然后粘贴该流节点的 JSON 描述,然后我可以毫无错误地导入流,然后部署没有错误的流程。
我在用:
- 节点版本:10.14.2
- Node-RED 版本:0.19.5
- node-red-contrib-influxdb 版本:0.2.2
解决方案
推荐阅读
- javascript - Angular如何通过在输入中搜索来过滤数组数据
- java - 休眠升级后的问题 - 休眠中的嵌套循环(CascadeType 和 EmbeddedId)
- android - 如何将 JSON 数据解析为 ListView
- json - 在 Angular 的表格中显示 json 数据
- javascript - 如何正确测试功能
- python - 函数的附加返回结果为无
- rest - Magento1.9 Rest Api 过滤器
- sql - 记录准确日期和时间的列
- android - Android:TextInputLayouts 总是有一个错误图标
- amazon-web-services - 有没有办法在不同的 ec2 实例中并行运行测试用例(例如,在三台 AWS 机器上运行一组 90 个用例)