node-red中写一个get结点

前言

现在还未想好如何通过url实现set (config) 和invoke (method),因为get (status) 是最容易的,所以先实现了get

本文是前两篇文章的结合

如何node-red中创建一个新的node: https://www.limfx.pro/ReadArticle/3240/ru-he-nodered-zhong-chuang-jian-yi-ge-xin-de-node

JavaScript爬虫: https://www.limfx.pro/ReadArticle/3245/javascript-pa-chong

创建流程

具体参考上文 如何node-red中创建一个新的node,本文只贴出代码内容

//cfet-get.js
module.exports = function(RED) {
    function cfetGetNode(config) {
        const axios = require('axios');  
        RED.nodes.createNode(this,config);
        var url="http://localhost:8003"+config.url;
        var node = this;
        node.on('input', function(msg) {
            axios(url).then(response => {  
                msg.payload=response.data;
                node.send(msg);
            }).catch(error => {  
                msg.payload=error;
                node.send(msg);
            });
            
        });
    }
    RED.nodes.registerType("cfet-get",cfetGetNode);
}

在cfet-get.js中使用到了axios,所以需要在当前文件夹,命令行输入npm install axios

<!--  cfet-get.html  -->
<script type="text/javascript">
    RED.nodes.registerType('cfet-get',{
        category: 'cfet',
        color: '#a6bbcf',
        defaults: {
            name: {value:""},
            url: {value:""}
        },
        inputs:1,
        outputs:1,
        icon: "file.png",
        label: function() {
            return this.name||"cfet-get";
        }
    });
</script>

<script type="text/html" data-template-name="cfet-get">
    <div class="form-row">
        <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
        <input type="text" id="node-input-name" placeholder="Name">
    </div>
    <div class="form-row">
        <label for="node-input-url"><i class="fa fa-tag"></i> Url</label>
        <input type="text" id="node-input-url">
    </div>
</script>

<script type="text/html" data-help-name="cfet-get">
    <p>A simple node that gets status from cfet</p>
</script>
//package.json
{
  "name": "cfet2app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "ye",
  "license": "ISC",
  "node-red": {
    "nodes": {
      "cfet-get": "cfet-get.js"
    }
  },
  "dependencies": {
    "axios": "^1.5.0",
  }
}

测试

首先打开cfet2app,以 get /WorkAll/CurrentStateNo作为测试

然后启动node-red,左侧栏找到我们新创建的cfet-get结点,拖出后可编辑属性,将Url编辑为/WorkAll/CurrentStateNo

最后搭建一个简单的测试流程,可以看到inject结点产生一个信号后输入到get结点,然后get到了/WorkAll/CurrentStateNo的JSON信息,最后在debug1结点处输出,如右侧栏所示


本文章使用limfx的vscode插件快速发布