节点红色 - 通过http将数据发布到Influxdb

时间:2018-04-27 22:25:44

标签: json http curl node-red

我试图通过Node-red将数据发布到Influxdb。 通过CURL我可以发布:

curl -i -XPOST 'http://localhost:8086/write?db=waterlevel' --data-binary 'vattenstand,lake=siljan,region=dalarna value=160.80'

并将数据放入InfluxDb。

当我尝试通过Node-red和HTTP请求发布时,我收到错误:

{"error":"unable to parse '{\"url\":\"http://192.168.1.116:8086/write?db=waterlevel\",\"method\":\"POST\",\"body\":\"vattenstand,lake=siljan,region=dalarna value=160.80\",}': missing tag value"}

我在Node-red的函数中使用此代码并将其传递给HTTP请求:

var dataString = 'vattenstand,lake=siljan,region=dalarna value=160.80';

msg.payload = {
    'url': 'http://192.168.1.116:8086/write?db=waterlevel',
    'method': 'POST',
    'body': dataString,
};

msg.headers = {
    Accept: "application/json"
};

return msg;

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

节点的侧边栏帮助详细说明了您应该设置的msg属性以配置节点。

您正在传递URL,方法和正文作为msg.payload的属性。这是不正确的。

前两个应该设置为msg.url,msg.method,而msg.payload应该是请求的主体。

在这种情况下,您已经直接使用URL和方法配置了节点,因此无需将其传递给消息。实际上,由于您已在节点中配置了URL,因此您将无法使用msg.url覆盖它。如果要为每条消息设置URL,则必须在编辑器中将节点的URL字段留空。

您可能还需要设置内容类型标题。

假设您很乐意将URL和方法保留在节点中,那么您的功能应该是:

msg.payload = 'vattenstand,lake=siljan,region=dalarna value=160.80';

msg.headers = {
    Accept: "application/json"
};
msg.headers['Content-type'] = 'application/x-www-form-urlencoded';

return msg;

答案 1 :(得分:1)

为什么不使用spezial Influxdb节点? https://flows.nodered.org/node/node-red-contrib-influxdb 优点:无需创建http标头。您可以将已定义的连接重用于其他数据。