【问题标题】:xmlhttp request in a node-red function node节点红色函数节点中的 xmlhttprequest
【发布时间】:2016-01-22 02:55:36
【问题描述】:
是否可以从节点红色的“功能”节点中发出 http GET 请求。
如果是的话,有人可以指点我一些示例代码。
我要解决的问题如下:
我想用自定义命令解析 msg.payload。对于每个命令,我都想发出一个 http 请求,并将该命令替换为 HTTP GET 请求的响应。
expl:
msg.payload = "Good day %name%. It's %Time% in the %TimeOfDay%. Time for your coffee";
%name%、%TimeOfDay% 和 %Time% 应替换为对 http://nodeserver/name、...、http://nodeserver/Time 的 Get 请求的内容。
【问题讨论】:
标签:
http
get
xmlhttprequest
ibm-cloud
node-red
【解决方案1】:
thnx 哈迪布,
经过半天的搜索,我发现http-node也可以通过在设置节点之前放置一个节点来配置
msg.url = "http://127.0.0.1:1880/" + msg.command ;
msg.method = "GET";
我使用以下代码获取命令列表
var parts = msg.payload.split('%'),
len = parts.length,
odd = function(num){return num % 2;};
msg.txt= msg.payload;
msg.commands = [];
msg.nrOfCommands = 0;
for (var i = 0; i < len ; i++){
if(odd(i)){
msg.commands.push(parts[i]);
msg.nrOfCommands = msg.nrOfCommands + 1;
}
}
return msg;
【解决方案2】:
你应该避免在函数节点中做异步或阻塞的东西。
不要试图在一个功能节点中完成所有操作,将多个功能节点与多个 http 请求节点链接在一起,一次构建一个部分的字符串。
您可以通过将字符串隐藏在 msg 对象而不是有效负载的另一个变量中来做到这一点。
需要注意的一点是,您应该确保在每次调用下一个 http 请求节点之前清除 msg.headers