javascript - 如何在 NodeRED 中创建自定义注入(inject) Node ?

标签 javascript node.js node-red

我想通过单击按钮启动我的 Node ,这样我就不必将注入(inject) Node 放在前面。如何在 javascript 文件中注册按钮点击?

我尝试将 node.on("input", async function(msg){/*some code*/}) 放入我注册 Node 的 javascript 文件中。我能够添加此按钮 enter image description here通过这个:

//HTML file script
<script type="text/javascript">
  RED.nodes.registerType('light', {
    category: "input",
    color: "#f3c12b",
    defaults: {
      name: {value: ""},
      plus: {value: ""},

      topic: {value: this.name},
      payload: {value: ""}
    },
    inputs: 0,
    outputs: 1,
    label: function(){
      return "Licht '"+this.name+"'" || "Licht";
    },
    button: {
      enabled: function(){
        return true;
      },
      onclick: function(){
         //I´ve put the code here, but then I have to reconfigure my functions
      }
    }
  });
</script>

//Javascript file --> register function
//Not getting any response
node.on("input", async function(msg) {
    msg = {};
    msg.topic = this.topic;
    msg.payload = "This is a new message!";

    node.send(msg);
});

我原以为,当我单击此 Node 时, Node 正在发送消息,但 Node 没有任何响应。

最佳答案

这里最好的办法是查看注入(inject) Node 源代码。 inject.html inject.js

在注入(inject) Node 的情况下,HTML 文件中按钮参数的 onclick 函数实际上对服务器上的 /inject/{id} 执行 POST 调用。

onclick: function() {
            
    ...

    var node = this;
    $.ajax({
        url: "inject/"+this.id,
        type:"POST",
        success: function(resp) { ... }
    });

}

在服务器上运行的注入(inject) JS 文件在 /inject/:id 托管一个 http 端点,当它被调用时通过 id 获取 Node 并调用 node.receive() 作为其输入的触发器。

module.exports = function(RED) {

    ...

    RED.httpAdmin.post("/inject/:id", RED.auth.needsPermission("inject.write"), function(req,res) {
        var node = RED.nodes.getNode(req.params.id);

        ...

        node.receive();
        
        ...
    });
}

关于javascript - 如何在 NodeRED 中创建自定义注入(inject) Node ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57148641/

相关文章:

javascript - 使用 HTML 输入来替换使用 Javascript 的字符串中的信息

node.js - Derby.js - npm install derby 成功,但找不到 derby 命令

node.js - 如果我在nodejs中的私有(private)方法中调用 module.exports.public_method 是否有副作用?

javascript - 使用 http 端点在 Node-RED 仪表板中显示本地镜像

javascript - 确定集合并删除 Angular 中的一项特定项目

javascript - 谷歌地图 API v3 : Turning user input coordinates to latlng?

javascript - 在 JavaScript 中分区

javascript - 使用 Passport.js 的登录系统始终执行 “failureRedirect” (nodejs)

node-red - 如何将 Node-RED 中的一根线路从一个节点移动到另一个节点?

node.js - 如何安装特定版本的node-red