简体   繁体   English

如何为 Node-Red 创建自定义模块以使用 require 节点语句并在流中需要 npm 模块

[英]How to create a custom module for Node-Red for use require statement of node and require npm modules inside flows

I need help to create a custom node to use the require estatement of nodeJs in node-red, according to the documentation three files are required in a common directory:我需要帮助来创建自定义节点以在 node-red 中使用 nodeJs 的 require 声明,根据文档,公共目录中需要三个文件:

    require
        -required.js
        -required.html
        -package.json

the package.json content is: package.json 的内容是:

     {
        "name": "node-red-contrib-require",
        "node-red": {
            "nodes": {
                "require": "required.js"
            }
        }
    }

the required.html content is: required.html内容为:

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

<script type="text/html" data-template-name="require">
    <div class="form-row">
        <label for="node-input-name"
            ><i class="fa fa-tag" aria-hidden="true"></i> Module</label
        >
        <input type="text" id="node-input-name" placeholder="Name" />
    </div>
</script>

<script type="text/html" data-help-name="required">
    <p>
        A simple node that implements the require statement of nodeJs to message
        payloads as required modules
    </p>
</script>

I don't know how to implement the code for required.js file, in NodeJs is so easy than create a required function like:我不知道如何实现 required.js 文件的代码,在 NodeJs 中比创建所需的 function 更容易,例如:

function required(moduleName) {
    try {
        return moduleName ? require(moduleName) : undefined;
    } catch (error) {
        // console.log(error);
        //Node red error handle is this ok or need changes?
        node.error("error: " + error.toString(), undefined);
    }
}

thanks for any help, at this point I don't know if this is possible or I'm looking for pink unicorns感谢您的帮助,目前我不知道这是否可行,或者我正在寻找粉红色的独角兽

Thanks to @knolleary感谢@knolleary

The solution is:解决办法是:

unsafe-function node for node-red node 节点-红色节点的不安全功能节点

unsafe-function node for node-red source 节点红色源的不安全功能节点

forked version of node-red See stackoverflow answer node-red 的分叉版本请参阅 stackoverflow 答案

You can require npm modules inside the javascript file of each node.您可以在每个节点的 javascript 文件中要求 npm 模块。 Your function should be this way to have the correct boolean value:您的 function 应该是这样才能获得正确的 boolean 值:

function required(moduleName) {
    try {
        require('https').get(`https://www.npmjs.com/package/${moduleName}`,function(response){
  return response.statusCode == 200;

})
    } catch (error) {
        // console.log(error);
        //Node red error handle is this ok or need changes?
        node.error("error: " + error.toString(), undefined);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM