节点在流程部署时被创建,在流程运行期间可能会发送和接收一些消息,当下一个流程部署时它们会被删除。
它们由一对文件组成:
使用package.json
文件将所有内容打包为一个npm模块。
本示例将展示如何创建一个将消息负载转换为全小写字符的节点。
请确保您的系统已安装当前长期支持(LTS)版本的Node.js。撰写本文时最新版本为10.x。
创建一个用于开发代码的目录。在该目录下创建以下文件:
package.json
lower-case.js
lower-case.html
这是Node.js模块用来描述其内容的标准文件。
要生成一个标准的package.json
文件,可以使用命令npm init
。
该命令会询问一系列问题来帮助创建文件的初始内容,并在可能的情况下使用合理的默认值。当提示时,请为其指定名称
node-red-contrib-example-lower-case
。
生成后,您必须添加一个node-red
部分:
{
"name" : "node-red-contrib-example-lower-case",
...
"node-red" : {
"nodes": {
"lower-case": "lower-case.js"
}
}
}
这告诉运行时该模块包含哪些节点文件。
如需了解更多关于如何打包您的节点的信息,包括发布节点前需要设置的命名要求和其他属性,请参阅打包指南。
注意: 请不要将此示例节点发布到npm!
module.exports = function(RED) {
function LowerCaseNode(config) {
RED.nodes.createNode(this,config);
var node = this;
node.on('input', function(msg) {
msg.payload = msg.payload.toLowerCase();
node.send(msg);
});
}
RED.nodes.registerType("lower-case",LowerCaseNode);
}
该节点被封装为一个Node.js模块。模块导出一个函数,在运行时启动时加载该节点时会被调用。该函数被调用时会传入一个参数RED
,该参数提供了对Node-RED运行时API的模块访问权限。
节点本身由一个函数LowerCaseNode
定义,每当创建节点的新实例时就会调用该函数。它会接收一个包含流程编辑器中设置的节点特定属性的对象。
该函数调用RED.nodes.createNode
来初始化所有节点共享的功能。之后,执行节点特定的代码。
在此实例中,节点向input
事件注册了一个监听器,每当有消息到达该节点时就会被调用。在这个监听器内部,它会将消息负载转换为小写,然后调用send
函数将消息继续传递到流程中。
最后,LowerCaseNode
函数通过节点名称lower-case
在运行时环境中完成注册。
如果节点有任何外部模块依赖项,它们必须包含在其package.json
文件的dependencies
部分中。
有关节点运行时部分的更多信息,请参见此处。
<script type="text/javascript">
RED.nodes.registerType('lower-case',{
category: 'function',
color: '#a6bbcf',
defaults: {
name: {value:""}
},
inputs: 1,
outputs: 1,
icon: "file.svg",
label: function() {
return this.name||"lower-case";
}
});
</script>
<script type="text/html" data-template-name="lower-case">
<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>
</script>
<script type="text/html" data-help-name="lower-case">
<p>A simple node that converts the message payloads into all lower-case characters</p>
</script>
A node’s HTML file provides the following things:
在本示例中,该节点具有一个可编辑属性name
。虽然这不是必需的,但按照广泛使用的约定,该属性有助于区分单个流程中多个节点实例。
有关节点编辑器部分的更多信息,请参见此处。
按照上述步骤创建基础节点模块后,您可以将其安装到Node-RED运行环境中。
要在本地测试一个节点模块,可以使用npm install
命令。这允许您在本地目录中开发节点,并在开发期间将其链接到本地node-red安装中。
在您的node-red用户目录下,通常是~/.node-red
,运行:
npm install <location of node module>
例如,在Mac OS或Linux系统上,如果您的节点位于~/dev/node-red-contrib-example-lower-case
目录下,您需要执行以下操作:
cd ~/.node-red
npm install ~/dev/node-red-contrib-example-lower-case
在Windows系统上,您需要执行以下操作:
cd C:\Users\my_name\.node_red
npm install C:\Users\my_name\Documents\GitHub\node-red-contrib-example-lower-case
这将在~/.node-red/node_modules
目录中创建一个指向您节点模块项目目录的符号链接,这样当Node-RED启动时就能发现该节点。对节点文件的任何更改只需重启Node-RED即可生效。在Windows系统上,同样需要使用npm 5.x或更高版本:
npm
will automatically add an entry for your module in the
package.json
file located in your user directory. If you don't want
it to do this, use the --no-save
option to the npm install
command.
为了支持单元测试,可以使用一个名为node-red-node-test-helper
的npm模块。该测试助手是基于Node-RED运行时构建的框架,旨在简化节点测试流程。
使用此框架,您可以创建测试流程,然后断言您的节点属性和输出是否按预期工作。例如,要为小写转换节点添加单元测试,您可以在节点模块包中添加一个test
文件夹,其中包含名为_spec.js
的文件
var helper = require("node-red-node-test-helper");
var lowerNode = require("../lower-case.js");
describe('lower-case Node', function () {
afterEach(function () {
helper.unload();
});
it('should be loaded', function (done) {
var flow = [{ id: "n1", type: "lower-case", name: "test name" }];
helper.load(lowerNode, flow, function () {
var n1 = helper.getNode("n1");
n1.should.have.property('name', 'test name');
done();
});
});
it('should make payload lower case', function (done) {
var flow = [{ id: "n1", type: "lower-case", name: "test name",wires:[["n2"]] },
{ id: "n2", type: "helper" }];
helper.load(lowerNode, flow, function () {
var n2 = helper.getNode("n2");
var n1 = helper.getNode("n1");
n2.on("input", function (msg) {
msg.should.have.property('payload', 'uppercase');
done();
});
n1.receive({ payload: "UpperCase" });
});
});
});
这些测试用于检查节点是否正确加载到运行时环境中,并验证其是否按预期将有效载荷转换为小写形式。
两项测试都使用helper.load
将节点加载到运行时环境中,提供被测节点和一个测试流。第一个测试检查运行时中的节点是否具有正确的名称属性。第二个测试使用辅助节点来验证该节点的输出确实是小写形式。
helper模块包含从Node-RED核心节点中提取的其他测试示例。有关helper模块的更多信息,请参阅相关的README文件。
Node-RED: 面向事件驱动应用的低代码编程平台。
版权所有 OpenJS基金会 及 Node-RED 贡献者。保留所有权利。OpenJS基金会 拥有注册商标并使用商标。有关 OpenJS基金会 的商标列表,请参阅我们的 商标政策 和 商标列表。未在 OpenJS基金会商标列表 中标注的商标™或注册®商标归其各自持有人所有。使用这些商标并不意味着与它们有任何关联或获得其认可。
The OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS基金会章程 | 商标政策 | 商标列表 | Cookie政策