2021-07-12-nodeRed 源码分析8- runtime nodes模块分析

功能概述#

提供运行时与节点相关的接口,如节点注册、流程增删改查、节点模块处理、上下文等。

所依赖的三方库#

  • when
  • path
  • fs
  • clone
  • util

文件域变量#

  • @node-red/registry
    • 为runtime提供节点注册、响应、发现及管理功能
  • credentials
    • 封装credentials相关操作
  • context
    • 提供上下文环境,可定义变量、保存等
  • Node
    • 为所有新建立的节点提供初始化

API#

Function Description
// Lifecycle —-
init 初始化函数,调用涉及的几个模块的init方法
load 加载依赖模块
// Node registry —-
createNode 调用Node模块创建一个节点,并配置credentials
getNode 调用flow模块获取节点
eachNode 调用flow模块遍历所有节点,可传入回调函数
getContext 调用context模块获取上下文
installModule 安装一个模块
uninstallModule 删除一个模块
enableNode 启用一个模块
disableNode 禁用一个模块
// Node type registry —-
registerType 调用registry模块注册节点
getType 调用registry模块获取节点类型
getNodeInfo 调用registry模块获取节点信息
getNodeList 调用registry模块获得已安装的node modules
getModuleInfo 调用registry模块获得node module信息
getNodeConfigs 调用registry模块获取所有节点的html内容
getNodeConfig 调用registry模块获取某个node的html内容
getNodeIconPath 调用registry模块获取某个node的图标
getNodeIcons 调用registry模块获取所有节点的图标
getNodeExampleFlows 调用registry模块获取示例流程
getNodeExampleFlowPath 调用registry模块获取示例流程目录
clearRegistry 调用registry模块清除registry模块内容
cleanModuleList 调用registry模块清除模块列表
// Flow handling —-
loadFlows 调用flow模块完成流程加载
startFlows 调用flow模块完成流程启动
stopFlows 调用flow模块完成流程结束
setFlows 调用flow模块完成全部流程的设置
getFlows 调用flow模块返回所有流程
addFlow 调用flow模块返回增加流程
getFlow 调用flow模块返回获取流程
updateFlow 调用flow模块更新获取流程
removeFlow 调用flow模块更新删除流程
// Credentials —-
addCredentials 调用credentials模块增加凭证
getCredentials 调用credentials模块获取凭证
deleteCredentials 调用credentials模块删除凭证
getCredentialDefinition 调用credentials模块获取凭证定义
setCredentialSecret 调用credentials模块设置凭证密码
clearCredentials 调用credentials模块清除凭证
exportCredentials 调用credentials模块导出凭证
getCredentialKeyType 调用credentials模块获取凭证类型
// Contexts —-
loadContextsPlugin 调用context模块加载上下文保存插件
closeContextsPlugin 调用context模块关闭上下文保存插件
listContextStores 调用context模块罗列上下文保存插件

涉及文件#

  1. packages\node_modules@node-red\runtime\lib\nodes\index.js

代码分析#

参与流程#

sequenceDiagram
    autonumber
    title: 初始化
    other ->> index.js@nodes@lib@runtime : init();
    index.js@nodes@lib@runtime ->> credentials.js@nodes@lib@runtime: init()
    index.js@nodes@lib@runtime ->> index.js@flows@lib@runtime: init()
    index.js@nodes@lib@runtime ->> index.js@lib@registry: init()
    index.js@nodes@lib@runtime ->> context.js@nodes@lib@runtime: init()
sequenceDiagram
    autonumber
    title: start, 加载流、节点等
    other ->>index.js@nodes@lib@runtime: load()
    index.js@nodes@lib@runtime ->>index.js@lib@registry: load()

    other ->>index.js@nodes@lib@runtime: registerType()
    index.js@nodes@lib@runtime ->>index.js@lib@registry: registerType()
    index.js@lib@registry ->>registry.js@lib@registry: registerNodeConstructor()

    other ->>index.js@nodes@lib@runtime: loadFlows()
    index.js@nodes@lib@runtime ->>index.js@flows@lib@runtime: load()

    other ->>index.js@nodes@lib@runtime: startFlows()
    index.js@nodes@lib@runtime ->>index.js@flows@lib@runtime: startFlows()

    other ->>index.js@nodes@lib@runtime: createNode()
    index.js@nodes@lib@runtime ->>Node.js@nodes@lib@runtime: Node()
sequenceDiagram
    autonumber



    title: 安装/卸载模块



    other ->>index.js@nodes@lib@runtime : installModule();
    index.js@nodes@lib@runtime ->>index.js@lib@registry : installModule();

    other ->>index.js@nodes@lib@runtime : uninstallModule();
    index.js@nodes@lib@runtime ->>index.js@lib@registry : uninstallModule();
sequenceDiagram
    autonumber

    title: 禁用/使用节点



    other ->>index.js@nodes@lib@runtime : enableNode();
    index.js@nodes@lib@runtime ->>index.js@lib@registry : enableNode();
    index.js@lib@registry -->>index.js@nodes@lib@runtime : reportNodeStateChange();

    other ->>index.js@nodes@lib@runtime : disableNode();
    index.js@nodes@lib@runtime ->>index.js@lib@registry : disableNode();
    index.js@lib@registry -->>index.js@nodes@lib@runtime : reportNodeStateChange();

例子#

  1. 使用html参数创建节点
    1
    2
    3
    4
    function MQTTBrokerNode(n) {
    RED.nodes.createNode(this,n);

    }
  2. 使用html参数创建节点
    1
    2
    3
    4
    5
    function MQTTBrokerNode(n) {

    this.brokerConn = RED.nodes.getNode(this.broker);//根据ID从已注册的节点中找

    }
作者

lxmuyu

发布于

2022-02-17

更新于

2022-02-23

许可协议