Node-red自定义节点,如何使用节点属性?

Khk*_*khy 2 node-red

我正在尝试创建自定义节点,我正在尝试非常简单的一个。我需要使用节点的属性(用户从下拉列表中选择的值)通过 msg.payload 发送/输出该属性的值。

这是调试选项卡中的错误消息:

4/7/2017 21.45.06node: lolo
msg : error
"ReferenceError: $ is not defined"
Run Code Online (Sandbox Code Playgroud)

这是所需的输出:

“ppp[洛洛:m2]”

我删除了 js 文件中带有 $ 的行,因为它无法识别 jQuery。我用这个代替

msg.payload = msg.payload +"[" + nodeName+":"+ node.axis +"]";
Run Code Online (Sandbox Code Playgroud)

但在输出中,选项值未定义,而不是选择下拉列表中选项之一的值:

5/7/2017 11.34.22node: 5aa4aa59.f9fa04
msg.payload : string[19]
"ppp[lolo:undefined]"
Run Code Online (Sandbox Code Playgroud)

这是节点的 html 文件:

4/7/2017 21.45.06node: lolo
msg : error
"ReferenceError: $ is not defined"
Run Code Online (Sandbox Code Playgroud)

这是节点的 js 文件:

msg.payload = msg.payload +"[" + nodeName+":"+ node.axis +"]";
Run Code Online (Sandbox Code Playgroud)

har*_*llb 5

请务必记住,Node-RED 节点的 2 个独立部分在非常不同的位置运行:

  • .js文件在 Node-RED 的后端服务器端运行
  • .html文件在访问用户客户端计算机上的 Node-RED 编辑器的 Web 浏览器中运行。

这意味着该.js文件无法直接访问编辑器配置窗口中的字段,也无法访问 jquery ($ ) 表示法。

部署流程时,所有配置变量都会传递到config变量中的后端。您已经在以下位置访问过该值:

var axis = config.axis; 
Run Code Online (Sandbox Code Playgroud)

var x = $("#node-input-axis").val();所以你可以只使用变量而不是axis

您无法使用,因为您在尝试使用它之前node.axis尚未config.axis绑定this.axisnode.axis

例如:

module.exports = function(RED) {
    function helloWorld(config) {
        RED.nodes.createNode(this,config);
        //var context = this.context();
        var nodeName = this.name;
        this.axis = config.axis; 
        var node = this;

        this.on('input', function(msg) {
            msg.payload = msg.payload +"[" + nodeName+":"+ node.axis +"]";
            //{payload: nodeName+" "+ node.axis};
            node.send(msg);
        });
        //console.log(value);
    }
    RED.nodes.registerType("Hello World",helloWorld);
};
Run Code Online (Sandbox Code Playgroud)