NodeRed使用心得,实现增删改查等

news2024/12/28 0:28:40

使用场景介绍

在VUE中使用nodeRed实现对节点的 增删改查等功能,且储存成功之后下点击时启动对应流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装与配置

1.安装NodeRed
npm install -g --unsafe-perm node-red
安装完成后,你可以通过运行以下命令来启动Node-RED
node-red-start

2. 配置文件
Node-RED的主要配置文件是settings.js。这个文件位于Node-RED的安装目录下,或者在你的用户目录下的.node-red文件夹中。你可以通过编辑这个文件来自定义Node-RED的行为。

首先就是部署了,要真正的实现且储存成功之后下点击时启动对应流程还是要麻烦后端同学部署一下(具体如何部署我也不清楚)
后端部署之后会提供一个地址 如:

http://192.168.1.19:1880/#flow/ff07562cd6ebb566
http://192.168.1.19:1880 为后端提供的地址,ff07562cd6ebb566为当前流程的ID已启动对应的流程

拖动一些节点右上角后点击部署后,会自动存储一个json文件

[
    {
        "id": "8587ac557a88ac60",//流程ID
        "type": "tab",
        "label": "流程 2", //流程名称
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "de312079982d37a9",
        "type": "debug",
        "z": "8587ac557a88ac60",
        "name": "debug 3",//节点类型
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1000,//节点位置
        "y": 300,//节点位置
        "wires": []
    },
    {
        "id": "b3f87d7d2496d6b3",
        "type": "http request",
        "z": "8587ac557a88ac60",
        "name": "Get News Details",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "http://shop.pulisi.sd.cn:8088/pleaseds/stationlist?strwhere=",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 370,
        "y": 360,
        "wires": [
            [
                "6f54cda79df1511a"
            ]
        ]
    },
    {
        "id": "10a4b6f9d7cb092c",
        "type": "inject",
        "z": "8587ac557a88ac60",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 110,
        "y": 300,
        "wires": [
            [
                "b3f87d7d2496d6b3"
            ]
        ]
    },
    {
        "id": "6f54cda79df1511a",
        "type": "function",
        "z": "8587ac557a88ac60",
        "name": "function 3",
        "func": "\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 680,
        "y": 360,
        "wires": [
            [
                "de312079982d37a9"
            ]
        ]
    }
]

代码演示增删改查

在以上完成 安装 部署 存储等 就可以进行编程了(完整代码我会贴在我的雨雀笔记!毕竟是公司代码需要一些保密)

查询出对应节点

  getlist() {
      axios.get('http://192.168.1.19:1880/flows') 这里是替换你后端的api
        .then(res => {
          console.log(res, 'res');
          // 将API返回的数据(res.data)进行过滤和映射处理,生成一个新的数组赋值给this.SceneLinkageList
          this.SceneLinkageList = res.data
            // 过滤出type为'tab'且label存在的项
            .filter(item => item.type === 'tab' && item.label)
            // 对过滤后的每一项进行映射,生成新的对象数组
            .map(item => ({
              // 新对象的id属性,取自原项的id
              id: item.id,
              // 新对象的label属性,取自原项的label
              label: item.label,
              // 新对象的description属性,取自原项的info,如果info不存在则默认为空字符串
              description: item.info || '',
              // 新对象的status属性,根据原项的disabled属性决定,如果disabled为true则为'disabled',否则为'enabled'
              status: item.disabled ? 'disabled' : 'enabled'
            }));
          // 将处理后的SceneLinkageList数组复制一份给filteredSceneLinkageList,用于后续的过滤显示
          this.filteredSceneLinkageList = [...this.SceneLinkageList]; 
        })
        .catch(error => {
          console.error('请求失败:', error);
        });
    },

启动对应流程
将上一步的json数据保存后 渲染到页面后点击时传值

launchNodeRED(rule) {
  console.log(rule, 'rule');

  if (!rule.id) {
    console.error('该规则没有关联的流程 ID');
    this.$message.error('无法启动流程:未指定流程 ID');
    return;
  }

  if (this.currentNodeREDWindow && !this.currentNodeREDWindow.closed) {
    this.currentNodeREDWindow.close();
  }

  const nodeREDUrl = `http://192.168.1.19:1880/#flow/${rule.id}`;
  console.log('Node-RED URL:', nodeREDUrl);

  try {
    this.currentNodeREDWindow = window.open(nodeREDUrl, 'nodeREDWindow');

    if (!this.currentNodeREDWindow) {
      throw new Error('弹出窗口被阻止');
    }
  } catch (error) {
    console.error('打开 Node-RED 流程失败:', error);
    this.$message.error('启动流程失败,请检查您的浏览器设置');
  }
},

删除

axios.delete(http://192.168.1.19:1880/flow/${rule.id});

新增与编辑
async submitForm() {
try {
const valid = await this.$refs.ruleForm.validate();
if (!valid) return;

    if (this.dialogTitle === '新增规则') {
      const response = await axios.post('http://192.168.1.19:1880/flow', {
        label: this.formData.name,
        info: this.formData.description,
        nodes: []
      });

      const newFlow = response.data;
      this.SceneLinkageList.push({
        id: newFlow.id,
        label: newFlow.label,
        description: newFlow.info,
        status: 'enabled'
      });

      this.$message.success('新流程创建成功');
      this.launchNodeRED({ id: newFlow.id });
    } else {
      const response = await axios.get(`http://192.168.1.19:1880/flow/${this.formData.id}`);
      const flow = response.data;
      flow.label = this.formData.name;
      flow.info = this.formData.description;
      await axios.put(`http://192.168.1.19:1880/flow/${this.formData.id}`, flow);

      const updatedRule = this.SceneLinkageList.find(rule => rule.id === this.formData.id);
      if (updatedRule) {
        updatedRule.label = this.formData.name;
        updatedRule.description = this.formData.description;
      }

      this.$message.success('规则修改成功');
    }

    this.dialogVisible = false;
    this.getlist(); // Refresh the list after adding or editing
  } catch (error) {
    console.error('提交表单失败:', error);
    this.$message.error('操作失败,请重试');
  }
},

这里只做简单的介绍,看不懂把代码喂给AI他也能给你解答

如何在nodeRed中运行想要的结果

关于noderRed如何配置节点并运行?
在这里插入图片描述

1.首先需要一个能触发的节点如 inject 拖到画布中
2.配置HTTP节点,自定义调整 请求方式 URL地址 返回值等 无需过多配置
3.配置function放(可省略)
4.debug节点打印输出的内容
5.将他们如图依次连接后,点击部署后, 点击 inject 左侧按钮即可打印接口返回的结果
在这里插入图片描述

如何个性化配置nodeRed

nodeRed下载后 网页标题与页面标题都是初始化的
在这里插入图片描述
如果要修改则需要去nodeRed安装目录找到settings.js文件

如何找到nodeRed安装目录?
 常见的默认安装目录:
- Windows: `C:\Users\[用户名]\.node-red`
- Linux: `/home/[用户名]/.node-red`
- Mac: `/Users/[用户名]/.node-red`

找到后打开文件找到 editorTheme: {}在这个里面添加你要的值,如

 page: {
        title: "规则设计器"
    },
    header: {
        title: "规则设计器"
    },

最后就是安装个性化插件 以及 设置语言,设置中皆可自定义调整
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

升级鸿蒙Next,小记

写在前面 这个小记是想记录一下Next系统不断完善的过程,给想升级还没升级的同志们一些提醒。虽然这个系统还有这样那样的一些问题,但是我觉得升级之后很完美 续航时间明显变长了,充电,玩游戏以前会发热,现在完全不会…

Android Studio | 连接手机设备后,启动App时出现:Waiting For DebuggerApplication (App名)...

在这种情况下,打开目录文件,出现 Is:/storage/emulated/: Permission denied 问题分析: 以上两种情况表明应用程序试图访问Android设备的存储空间中的/storage/emulated/目录,但是没有足够的权限去执行这个操作。 解决办法&…

如何卸载和升级 Angular-CLI ?

Angular-CLI 是开发人员使用 Angular 的必备工具。然而,随着频繁的更新和新版本的出现,了解如何有效地卸载和升级 Angular-CLI 对开发人员来说至关重要。本指南提供了一个全面的、循序渐进的方法来帮助您顺利过渡到最新版本。 必备条件 确保您的系统上…

jangow靶机

打开靶机,打开kali,有的人会发现扫不到靶机的ip 在网上搜索了半天,发现是靶机的网卡配置有问题 重启靶机,选第二个 进去后再选第二个,按e 找到ro这一行 把ro后面这一行的内容都替换成ro rw signin init/bin/bash ctr…

[c++进阶(三)]单例模式及特殊类的设计

1.前言 在实际场景中,总会遇见一些特殊情况,比如设计一个类,只能在堆上开辟空间, 或者是设计一个类只能实例化一个对象。那么我们应该如何编写代码呢?本篇将会详细的介绍 本章重点: 本篇文章着重讲解如何设计一些特殊 的类,包括不能被拷贝,只能在栈/堆上…

CSharp: Oracle Stored Procedure query table

存储过程查询postgreSQL,Oracle 和sql server,Mysql 有区别。程序调用也是有区别。 oracle sql script: CREATE OR REPLACE PROCEDURE procSelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId p…

macos 隐藏、加密磁盘、文件

磁盘加密 打开磁盘工具 点击添加 设置加密参数 设置密码 查看文件 不用的时候右键卸载即可使用的时候装载磁盘,并输入密码即可 修改密码 解密 加密,输入密码即可 禁止开机自动挂载此加密磁盘 如果不禁止自动挂载磁盘,开机后会弹出输入…

cesium入门学习一

1.学习目的 作为网页显示,我只要实现了cesium网页显示,就可以到时候通过qt的webview显示html界面,来显示地图,js对于学过c的人而言,没啥难度,不过是换一种语法,而且cesium的教程相对于osgeart…

dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端

前情提要 交互场景:dify的ChatFlow上传文件(本示例是单张图片),通过HTTP请求至SpringBoot后端dify版本:0.13.2python版本:3.12.7 1. 自定义上传变量 在【开始】节点自定义变量单文件上传变量file 2. 下接HTTP请求节点 BODY要…

Flutter DragTarget拖拽控件详解

文章目录 1. DragTarget 控件的构造函数主要参数: 2. DragTarget 的工作原理3. 常见用法示例 1:实现一个简单的拖拽目标解释:示例 2:与 Draggable 结合使用解释: 4. DragTarget 的回调详解5. 总结 DragTarget 是 Flutt…

深度学习blog-Transformer-注意力机制和编码器解码器

注意力机制:当我们看一个图像或者听一段音频时,会根据自己的需求,集中注意力在关键元素上,以获取相关信息。 同样地,注意力机制中的模型也会根据输入的不同部分,给它们不同的权重,并集中注意力在…

改进爬山算法之一:随机化爬山法(Stochastic Hill Climbing,SHC)

随机化爬山法(Stochastic Hill Climbing),也被称为随机爬山法,是一种基于搜索算法的优化方法,是爬山算法的一个变种,它通过引入随机性来减少算法陷入局部最优解的风险,并增加搜索解空间的能力。这种方法特别适合于解决那些具有多个局部最优解的优化问题。 一、算法思想 …

AntDB 分布式集群模式部署

1 说明 如下图所示,AntDB 分布式数据库,包含计算节点(CN)、数据节点(DN)、全局事务管理 节点(GTM)和集群管理节点(MGR),共 4 个组成部分。 在…

Mysql数据库Redo日志和Undo日志的理解

数据库redo日志和undo日志 1、redo日志1.1 redo日志的作用1.1.1 不使用redo日志的问题1.1.2 使用redo日志的好处 1.2 redo日志刷盘策略 2、undo日志2.1 undo日志的作用2.2 undo日志的简要生成过程 1、redo日志 事务的4大特性(ACID):原子性、…

Git(11)之log显示支持中文

Git(11)之log显示支持中文 Author:Once Day Date:2024年12月21日 漫漫长路有人对你微笑过嘛… 参考文档:GIT使用log命令显示中文乱码_gitlab的log在matlab里显示中文乱码-CSDN博客 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSD…

循环神经网络(RNN)入门指南:从原理到实践

目录 1. 循环神经网络的基本概念 2. 简单循环网络及其应用 3. 参数学习与优化 4. 基于门控的循环神经网络 4.1 长短期记忆网络(LSTM) 4.1.1 LSTM的核心组件: 4.2 门控循环单元(GRU) 5 实际应用中的优化技巧 5…

腾讯云云开发 Copilot 深度探索与实战分享

个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 一、引言 二、产品介绍 三、产品体验过程 四、整体总结 五、给开发者的复用建议 六、对 AI 辅助开发的前景展望 一、引言 在当今数字化转型加速的时代,…

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…

基于python的电子报实现思路

一种基于PDF生成电子报的思路 需求提出实现思路:技术路线核心代码: 需求提出 最近公司提出了一个电子报的需求,可看网上实现的思路基本上是方正系列的排版软件实现的,公司没必要买这么一套,于是按照自己的思路搞了一个…

【HarmonyOS NEXT】鸿蒙原生应用“上述”

鸿蒙原生应用“上述”已上架华为应用市场,欢迎升级了鸿蒙NEXT系统的用户下载体验,用原生更流畅。 个人CSDN鸿蒙专栏欢迎订阅:https://blog.csdn.net/weixin_44640245/category_12536933.html?fromshareblogcolumn&sharetypeblogcolumn&a…