Node-RED editor-api 部UnterteilungQuellencodeAnalyse

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

Node-RED editor-api 部UnterteilungQuellencodeAnalyse缩略图
🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  1. 1. 背景
  2. 2. editor-api
  3. 3. 总结

背景

最近总有读者来向我询问如何定制开发Node-RED,他们想基于自己的项目做一些定制开发。
比如调整Node-RED的布局,主题色,增加一些Knopf。或者将一些其他Funktion集成进去。
接下来的几篇Artikel我们就来Unterteilung析一下NODE-RED的Quellencode。

NODE-RED的核心代码主要在packages/node_modules/@node-red 该目录下。
根据最新版,该目录下有6个子目录,Unterteilung别是:

  • editor-api Herausgeber器后端代码
  • editor-client Herausgeber器前端代码
  • nodes 默认安装的节点
  • registry 插件,库,节点的Registrierung管理
  • runtime Betrieb时入口,也是node-red的入口
  • util 辅助Werkzeuge

本篇首先讲解一下editor-api该目录的作用 及重要Quellencode。方便开发人员开发时能够快速理解,并找zu对应的文件。

editor-api

该目录存放的是用于支撑editor-clientFunktion的后端api服务。
它是使用express启动的一个应用。依赖@node-red/util和@node-red/editor-client。
该模块的入口是./lib/index.js

应用初始化代码

function init(settings,_server,storage,runtimeAPI) {
    server = _server;
    if (settings.httpAdminRoot !== false) {
        adminApp = express();

        var cors = require('cors');
        var corsHandler = cors({
           origin: "*",
           methods: "GET,PUT,POST,DELETE"
        });
        adminApp.use(corsHandler);

        if (settings.httpAdminMiddleware) {
            if (typeof settings.httpAdminMiddleware === "function" || Array.isArray(settings.httpAdminMiddleware)) {
                adminApp.use(settings.httpAdminMiddleware);
            }
        }

        var defaultServerSettings = {
            "x-powered-by": false
        }
        var serverSettings = Object.assign({},defaultServerSettings,settings.httpServerOptions||{});
        for (var eOption in serverSettings) {
            adminApp.set(eOption, serverSettings[eOption]);
        }

        auth.init(settings,storage);

        var maxApiRequestSize = settings.apiMaxLength || '5mb';
        adminApp.use(bodyParser.json({limit:maxApiRequestSize}));
        adminApp.use(bodyParser.urlencoded({limit:maxApiRequestSize,extended:true}));

        adminApp.get("/auth/login",auth.login,apiUtil.errorHandler);
        if (settings.adminAuth) {
            if (settings.adminAuth.type === "strategy") {
                auth.genericStrategy(adminApp,settings.adminAuth.strategy);
            } else if (settings.adminAuth.type === "credentials") {
                adminApp.use(passport.initialize());
                adminApp.post("/auth/token",
                    auth.ensureClientSecret,
                    auth.authenticateClient,
                    auth.getToken,
                    auth.errorHandler
                );
            } else if (settings.adminAuth.tokens) {
                adminApp.use(passport.initialize());
            }
            adminApp.post("/auth/revoke",auth.needsPermission(""),auth.revoke,apiUtil.errorHandler);
        }

        // Editor
        if (!settings.disableEditor) {
            editor = require("./editor");
            var editorApp = editor.init(server, settings, runtimeAPI);
            adminApp.use(editorApp);
        }

        if (settings.httpAdminCors) {
            var corsHandler = cors(settings.httpAdminCors);
            adminApp.use(corsHandler);
        }

        var adminApiApp = require("./admin").init(settings, runtimeAPI);
        adminApp.use(adminApiApp);
    } else {
        adminApp = null;
    }
}

在lib下,Existenz三个目录,Unterteilung别是admin,auth,editor。
三个目录下都有一个index.js 文件,该文件定义Schnittstelle路由,Schnittstelle所需要的权限,以及对应的处理函数。

Herausgeber器的Registrierung逻辑,鉴权等都是在该模块处理。
Registrierung鉴权在editor-api/lib/auth/index.js

该模块下提供的Herausgeber器RelatedSchnittstelle存放在editor-api/lib/editor目录下。
比如国际化,证书,主题,设置,

editor-api中的Schnittstelle底层是要调用Betrieb时的Schnittstelle。比如admin/context中的Löschen函数。
就是调用了 runtimeAPI

runtimeAPI.context.delete(opts).then(function(result) {
    res.status(204).end();
}).catch(function(err) {
    apiUtils.rejectHandler(req,res,err);
})

看zu这里相信大家都已经明白,用户Klick aufHerausgeber器中的某个Knopf,BitteSchnittstelle,
用户的Bitte首先zu底editor-api该模块中,有些逻辑是在该模块下直接处理,返回给客户端。
而有些是又调用了runtime中的函数,经过Betrieb时的处理。最终返回给用户的客户端。

比如
Öffnen.node-red的Herausgeber器会Bitte一个flows的Schnittstelle,
http://127.0.0.1:1880/flows?_=1676345536746

在admin/index.js中可以找zu
adminApp.get("/flows",needsPermission("flows.read"),flows.get,apiUtil.errorHandler);
如下图
定义路由入口

Node-RED editor-api 部UnterteilungQuellencodeAnalyse插图

定义处理函数

Node-RED editor-api 部UnterteilungQuellencodeAnalyse插图1

这就是路由/flows对应的处理函数flows.get

注入此类,你在浏览器中看zu的每一个Bitte都可以在editor-api中找zu对应的路由配置。
当然有些是使用的通配符。走的静态资源Laden。

总结

要想改造NODE-RED 就必须懂得,如何根据看zu的页面,Schnittstelle来找zu对应的代码。
有时候代码只需要修改一行,但找zu这行代码的位置却需要半天。

来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Node-RED 字数 3085 字 · 阅读约 8 Unterteilung钟 更新 2023-02-14 永久链接 https://www.modbus.cn/11790.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和MeldungUnterteilung析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
Relevante Etiketten
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.