首页 > 解决方案 > Node-red:全局变量的问题

问题描述

我必须使用全局或流持久变量,并且在某些用途上遇到了麻烦:在简单函数中使用它时没问题,我有一个很好的返回消息和良好的 vakue(使用 .set 或 .get)但是当我尝试获取脚本中的变量以将其发送到 html 页面它不起作用!(使用相同的语法)

一个主意 ?下面是我的节点红色

[{"id":"1aed4db1.318612","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"8165070c.f8bec8","type":"template","z":"1aed4db1.318612","name":"html","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<!DOCTYPE html>\n<html>\n <head>\n  <meta charset=\"utf-8\"/>\n  \n  \n </head>\n <body onload=\"draw();\">\n   <canvas id=\"canvas\" width=\"500\" height=\"500\"></canvas>\n    <script>{{{payload.draw}}}</script>\n </body>\n</html>\n\n\n\n","output":"str","x":410,"y":200,"wires":[["e46f2202.f0adb"]]},{"id":"6460da00.6d5c68","type":"http in","z":"1aed4db1.318612","name":"","url":"/test","method":"get","upload":false,"swaggerDoc":"","x":60,"y":200,"wires":[["6d9dba5b.d5a514"]]},{"id":"e46f2202.f0adb","type":"http response","z":"1aed4db1.318612","name":"","statusCode":"","headers":{},"x":630,"y":200,"wires":[]},{"id":"94994060.2fe75","type":"debug","z":"1aed4db1.318612","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":500,"y":140,"wires":[]},{"id":"9a0d36a3.66cc08","type":"function","z":"1aed4db1.318612","name":"","func":"total=flow.get(\"test\");\nmsg.payload=total;\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":140,"wires":[["94994060.2fe75"]]},{"id":"d76ddfb4.1bee6","type":"inject","z":"1aed4db1.318612","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":80,"y":140,"wires":[["9a0d36a3.66cc08"]]},{"id":"946553b2.76d2f","type":"config","z":"1aed4db1.318612","name":"","properties":[{"p":"test","pt":"flow","to":"\"essai\"","tot":"str"}],"active":true,"x":90,"y":80,"wires":[]},{"id":"6d9dba5b.d5a514","type":"template","z":"1aed4db1.318612","name":"Draw","field":"payload.draw","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"    function draw() {\n        var canvas = document.getElementById(\"canvas\");\n        var ctx2 = canvas.getContext(\"2d\");\n        ctx2.fillStyle = 'red';\n        ctx2.fillRect(10, 10, 50, 50);\n        ctx2.fillText(flow.get(\"test\"),200,20);\n     }\n","output":"str","x":210,"y":200,"wires":[["8165070c.f8bec8"]]}]

标签: node-red

解决方案


好的,我做到了,它可以工作,但部分...

我添加了“essai={{payload}};” 在我的模板中,我从消息中获得了价值,但并非完全如此!例如,如果我在调试输出中发送一个类似 [100,200,300,400] 的数组,这没问题:味精发送的是相同的东西,但在我的模板中我只有第一个元素:“100”......我试图转换它串起来但结果相同..

我如何从“essai={{payload}};”中获取整个数组或值 ? 我在模板节点中的代码:

  function draw() {

var essai=[];
            essai={{payload}};
            var canvas = document.getElementById("canvas");
            var ctx = canvas.getContext("2d");
             ctx.fillStyle = 'red';
            ctx.fillRect(10, 10, 50, 50);
            ctx.fillText(essai, 100,100);
    }

以及用于发送消息的功能节点:

var total=[];
total=flow.get("agvs_montage");
msg.payload=total;

return msg;

发送的值为 [100,200,300,400] 并且填充文本仅显示“100”...


推荐阅读