嵌入现有应用

将Node-RED嵌入一个大型的应用程序,技术上是可行的。典型的场景是,你利用Node-RED来生成数据流,并将其呈现到Web面板上,你希望所有这些功能都出自一个程序。

首先要在应用的package.json中,像加入其它独立模块那样,加入node-red依赖项。

以下为在Express应用中嵌入运行时的最小示例。

var http = require('http');
var express = require("express");
var RED = require("node-red");

// Create an Express app
var app = express();

// Add a simple route for static content served from 'public'
app.use("/",express.static("public"));

// Create a server
var server = http.createServer(app);

// Create the settings object - see default settings.js file for other options
var settings = {
    httpAdminRoot:"/red",
    httpNodeRoot: "/api",
    userDir:"/home/nol/.nodered/",
    functionGlobalContext: { }    // enables global context
};

// Initialise the runtime with a server and settings
RED.init(server,settings);

// Serve the editor UI from /red
app.use(settings.httpAdminRoot,RED.httpAdmin);

// Serve the http nodes UI from /api
app.use(settings.httpNodeRoot,RED.httpNode);

server.listen(8000);

// Start the runtime
RED.start();

当使用这种方式时,Node-RED中的settings.js文件将不再起作用。取而代之的是,像上面的代码那样,将配置信息通过调用RED.init传入。

更进一步,以下配置项也将被忽略,因为它们都可以通过Express实例配置实现:

  • uiHost
  • uiPort
  • httpAdminAuth
  • httpNodeAuth
  • httpStatic
  • httpStaticAuth
  • https