带着问题看源码1-NodeRed如何提供Web服务的

带着问题看源码1-NodeRed如何提供Web服务的NodeRed 结构 NodeRed 既包含后端也包含前端 后端基于 Node js 同时包含 Express 框架 Express 是一个保持最小规模的灵活的 Node jsWeb 应用程序开发框架 为 Web 和移动应用程序提供一组强大的功能 NodeRed 中的 Express 工作流 配置 init theme base themeVariabl primaryColor FFFFFF sequenceDiag

博客迁移

不恰饭的小站

NodeRed结构 NodeRed既包含后端也包含前端。后端基于Node.js,同时包含 Express 框架。 Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。

NodeRed中的Express工作流

'primaryColor': '#FFFFFF'}}}%% sequenceDiagram autonumber

%%实现 title: NodeRed中的Express之路由配置 packages\node_modules\nodered\red.js
->> packages\node_modules\nodered\red.js: express() 创建app,为web服务提供入口 packages\node_modules\nodered\red.js ->>
packages\node_modules\nodered\red.js:
http.createServer,以app为处理函数,express提供路由、中间件处理

packages\node_modules\nodered\red.js ->>
packages\node_modules\nodered\red.js:根据httpAdminRoot、httpNodeRoot、httpStatic等变量,做根目录‘/’的路由,将根路径'/'路由到RED.httpAdmin(adminApp)上,将根路径'/'路由到RED.httpNode(runtime.httpNode
==nodeApp)上,配合httpin节点,实现节点内的http服务处理

packages\node_modules\nodered\red.js ->>
packages\node_modules\@nodered\runtime\lib\index.js : 配置runtimeb子路由 (
adminApp )

packages\node_modules\nodered\red.js ->>
packages\node_modules\@nodered\editorapi\lib\index.js :
配置editorapi路由,创建 nodeApp 、 adminApp 子路由

packages\node_modules\@nodered\editorapi\lib\index.js ->>
packages\node_modules\@nodered\editorapi\lib\editor\index.js :
配置editor editor模块路由,创建 editorApp 子路由
packages\node_modules\@nodered\editorapi\lib\index.js ->>
packages\node_modules\@nodered\editorapi\lib\admin\index.js :
配置editorapi admin模块路由,创建 adminApp 子路由 

mermaid  %%配置 %%{init: {'theme': 'base', 'themeVariables': {
'primaryColor': '#FFFFFF'}}}%% sequenceDiagram autonumber

%%实现 title: NodeRed中的Express之Web服务启动
packages\node_modules\nodered\red.js ->>
packages\node_modules\nodered\red.js: 完成初始化后,server.listen 配置参数
settings.uiPort settings.uiHost,启动服务 

 功能实现的参与者 packages\node_modules\nodered\red.js中的app提供对根目录 '/' 的路由,具体的实现由runTime实现
packages\node_modules\@nodered\runtime\lib\index.js中的adminApp将功能拆分,分别路由到editorapi和admin模块中;nodeApp将配合httpin节点,实现节点内的http服务处理
packages\node_modules\@nodered\editorapi\lib\editor\index.js的editorApp处理编辑器相关接口
packages\node_modules\@nodered\editorapi\lib\admin\index.js
的adminApp负责主要的功能接口

 功能分阶段描述
1. 第一个阶段,配置各路径的路由函数

| 路径 | 文件| 处理 | |  ----     | ----|----| | `/`	|
packages\node_modules\nodered\red.js | app | `/`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/auth/login`	|
packages\node_modules\@nodered\editorapi\lib\index.js | adminApp |
`/auth/token`	| packages\node_modules\@nodered\editorapi\lib\index.js
| adminApp | `/auth/revoke`	|
packages\node_modules\@nodered\editorapi\lib\index.js | adminApp  |
`/icons`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/icons/:module/:icon`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/icons/:scope/:module/:icon`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/theme`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/projects`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/^\/locales\/(.+)\/?$/`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/^\/library\/([^\/]+)\/([^\/]+)(?:$|\/(.*))/`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/^\/library\/([^\/]+)\/([^\/]+)\/(.*)/`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/credentials/:type/:id`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/settings/user`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/settings/user/keys`	|
packages\node_modules\@nodered\editorapi\lib\editor\index.js |
editorApp | `/flows`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/flow/:id`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/flow`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/nodes`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/^\/nodes\/messages/`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/^\/nodes\/((@[^\/]+\/)?[^\/]+\/[^\/]+)\/messages/`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/^\/nodes\/((@[^\/]+\/)?[^\/]+)$/`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/^\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/context/:scope(global)`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/context/:scope(global)/*`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/context/:scope(node|flow)/:id`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/context/:scope(node|flow)/:id/*`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/context/:scope(global)/*`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/context/:scope(node|flow)/:id/*`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp
| `/settings`	|
packages\node_modules\@nodered\editorapi\lib\admin\index.js | adminApp

2. 第二个阶段,服务端监听端口,启动服务
3. 第三个阶段,接收请求,返回数据

 功能使用场景 做为NodeRed的Web服务出现,是必需的功能。 以RestFul形式提供接口,封装基础与业务功能。

 实现方式优缺点 优点:
1. 通过封装子路由,将功能拆分到不同模块内,做到职责单一
2. 使用Express做路由,可以对同一地址多种请求方式进行封装,进行资源整合
3. 通过Express中间件,可以做密码验证等多种功能,扩展性强

缺点:
1. 原生Express 无法处理 async/await 。如果你在路由处理器或中间件里用到了 async/await 代码,就产生 UnhandledPromiseRejectionWarning
异常,需要做处理才可支持([详解如何让Express支持async/await](https://www.jb51.net/article/125279.htm))
2. Express 只单纯为一个支持中间件的路由库,缺少框架级的支持
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222016.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:45
下一篇 2026年3月17日 下午4:45


相关推荐

  • Java Web项目 图书管理系统「建议收藏」

    Java Web项目 图书管理系统「建议收藏」版权声明:本文为博主原创文章,未经博主允许不得转载2019.5.22更新看到很多人看这个项目我也没想到,不过我现在不在CSDN写文章了,博客地址链接←这是我的博客地址链接GitHub地址链接←这是我的github地址链接里面有我学习Java的过程以及笔记,希望大家一起交流。由于刚刚学习完JSP和Servlet在学习框架之前下你给更加巩固一下前面的知识所以写…

    2022年7月13日
    21
  • H5 识别条形码

    H5 识别条形码1 demo 下载链接 https pan baidu com s 1gqK3z3BxtYW T3VWSg 提取码 3mq22 支持拍照识别和照片上传识别 3 距离越近识别度越好 4 代码示例 DOCTYPE tmlPUBLIC W3C DTDhtml4 0Transitiona EN html headlang en title 条形码扫描示例 title amp headlang en html

    2026年3月19日
    2
  • 09_java访问Hadoop的HDFS

    09_java访问Hadoop的HDFS

    2021年8月23日
    55
  • SVN的安装和使用手册

    SVN的安装和使用手册nbsp nbsp nbsp nbsp 下载 TortoiseSVN 官网下载址 https www visualsvn com visualsvn download tortoisesvn 下载完成后是这样的 nbsp 安装 TortoiseSVN 此处的安装地址建议不动 当然你也可以选择你要安装的地址安装完成后在桌面点击右键查看如果有标记的两个文件说明已经安装成功 如果感觉英语看到有点困难的可以安装汉化 TortoiseSVN 下载语

    2026年3月26日
    0
  • java 常量接口

    java 常量接口接口当中也可以定义 成员变量 但是必须使用 publicstatic 三个关键字进行修饰 从效果上看 这其实就是接口的 常用 格式 publicstatic 数据类型常量名称 数据值 接口当中的常量 可以省略 publicstatic 接口中的常量 必须进行赋值 接口中常量的名称 使用大写的字母 publicinterf public

    2025年10月8日
    9
  • dz论坛修改html编辑器,discuz二次开发更换百度ueditor编辑器

    dz论坛修改html编辑器,discuz二次开发更换百度ueditor编辑器修改前必读:1、修改编辑器后会造成以前发过的帖子再次进行修改时(也就是编辑帖子操作)出现很多被DZ重写过的html标签,不方便进行修改,所以尽量在安装DZ后立刻进行修改。(当然,如果你有能力重写代码的话就可以无视啦)2、修改前请先在本地进行尝试或备份相关文件。需要修改的文件:templatedefaultforumpost_editor_body.htmtemplatedefaultforumpo…

    2022年5月12日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号