创建第二个流程

这个例子要稍微复杂一些,它将带入来自于外部资源的数据,并实现一些有用的本地化功能。

  • 访问外部Web网站
  • 从中抓取一些信息
  • 读取信息并将其转换为有用形式
  • 以两种格式将信息输出,其一为JSON对象,可供进一步的使用,其二为逻辑值,用于开启和关闭事物。

1. 加入Inject节点

上一个例子中,我们通过点击Inject按钮来触发整个流程。而对于本例,我们将Inject节点设置为,按固定间隔触发流程。

首先将面板上的Inject节点拖拽到工作区中。

然后双击该节点,在弹出的编辑器窗口中,将重复执行间隔设置为每 5 分钟

点击确定关闭窗口。

2. 加入HttpRequest节点

HttpRequest节点可用于在触发时获取Web页面。

拖入工作区后,将其网址属性设置为:

http://realtimeweb-prod.nationalgrid.com/SystemData.aspx

还可以为其设置一个容易识别的名称。

3. 加入Function节点

加入一个Function节点,并在其中添加以下代码:

// does a simple text extract parse of the http output to provide an
// object containing the uk power demand, frequency and time

if (~msg.payload.indexOf('<span')) {
    var dem = msg.payload.split('Demand:')[1].split("MW")[0];
    var fre = msg.payload.split('Frequency:')[1].split("Hz")[0];

    msg.payload = {};
    msg.payload.demand = parseInt(dem.split(">")[1].split("<")[0]);
    msg.payload.frequency = parseFloat(fre.split(">")[1].split("<")[0]);

    msg2 = {};
    msg2.payload = (msg.payload.frequency >= 50) ? true : false;

    return [msg,msg2];
}
return null;

设Function节点的输出端口数为2

4. 加入Debug节点

添加两个Debug节点。

5. 连接所有节点

  • 把Inject节点的输出端口和HttpRequest节点的输入端口连起来。
  • 把HttpRequest节点的输出端口和Function节点的输入端口连起来。
  • 把Function节点的各输出端口连接到不同Debug节点的输入端口上。

6. 部署

至此,所有节点还都在编辑器里,需要把它们部署到服务器上。

点击部署按钮。

选中调试边栏标签后(Ctrl加空格键,或通过下拉菜单,并点击调试标签),点击Inject按钮,应该可以看到类似下面形式的内容出现:

(Object) { "demand": 34819, "frequency": 50.04 }

而在另一个调试面板中可以看到:

(boolean) true

7. 小结

你现在拥有了一个可以访问互联网信息的流程,能够从中获得英国用电总量的动态数据,并且将其转化为包含demand(单位为兆瓦)和frequency(单位为赫兹)两条属性及数据的JavaScript对象形式

该对象经Function节点的第一个输出端口发出。

频率是一个用于表示总体压力的指标,比如当频率低于50赫兹时,表明整个国家电网有可能处于处于超负荷状态。状态标志信息是通过Function节点的第二个输出端口发出的。如果其载荷值为true,那么就表示电网容量满足要求。


源码

本例所创建的流程将以以下json格式表示。如果把它们粘贴到导入窗口(Ctrl加I键,或通过下拉菜单)中,就可以将流程直接导入到编辑器中。

[{"id":"11b032a3.ee4fcd","type":"inject","name":"Tick","topic":"","payload":"","repeat":"","crontab":"*/5 * * * *","once":false,"x":161,"y":828,"z":"6480e14.f9b7f2","wires":[["a2b3542e.5d4ca8"]]},{"id":"a2b3542e.5d4ca8","type":"http request","name":"UK Power","method":"GET","url":"http://realtimeweb-prod.nationalgrid.com/SystemData.aspx","x":301,"y":828,"z":"6480e14.f9b7f2","wires":[["2631e2da.d9ce1e"]]},{"id":"2631e2da.d9ce1e","type":"function","name":"UK Power Demand","func":"// does a simple text extract parse of the http output to provide an\n// object containing the uk power demand, frequency and time\n\nif (~msg.payload.indexOf('<span')) {\n    var dem = msg.payload.split('Demand:')[1].split(\"MW\")[0];\n    var fre = msg.payload.split('Frequency:')[1].split(\"Hz\")[0];\n\n    msg.payload = {};\n    msg.payload.demand = parseInt(dem.split(\">\")[1].split(\"<\")[0]);\n    msg.payload.frequency = parseFloat(fre.split(\">\")[1].split(\"<\")[0]);\n    \n    msg2 = {};\n    msg2.payload = (msg.payload.frequency >= 50) ? true : false;\n\n    return [msg,msg2];\n}\n\nreturn null;","outputs":"2","valid":true,"x":478,"y":828,"z":"6480e14.f9b7f2","wires":[["8e56f4d3.71a908"],["cd84371b.327bc8"]]},{"id":"8e56f4d3.71a908","type":"debug","name":"","active":true,"complete":false,"x":678,"y":798,"z":"6480e14.f9b7f2","wires":[]},{"id":"cd84371b.327bc8","type":"debug","name":"","active":true,"complete":false,"x":679,"y":869,"z":"6480e14.f9b7f2","wires":[]}]