我在 IBM Bluemix 上部署了一个非常简单的应用程序节点。此节点应用程序将以编程方式在同一台机器上启动节点 RED 实例,并在 /red 端点上提供节点 RED UI。
有一个端点 /startinstance 将启动节点 RED 实例
这是我正在使用的代码:
var RED = require('node-red');
var express = require('express'),
app = express(),
server = require('http').createServer(app);
var port = env.PORT:
var settings = {
httpAdminRoot: '/red',
httpNodeRoot: '/api',
userDir: instance.userDirectory,
functionGlobalContext: { }
};
app.get('/startinstance', function(req, res, next) {
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);
RED.start();
});
app.get('/stopinstance', function(req, res, next) {
RED.stop();
});
server.listen(port);
I 节点 RED UI 嵌入iFrame
在主应用程序 UI 中。
这工作正常,我可以成功启动节点 RED 实例。当我第一次访问节点 RED UI 时,它工作正常。但是当我停止实例并重新启动它时,它会在 google chrome 控制台中引发 Web 套接字错误,如下所示:
与“ws://myapp.mybluemix.net/red/comms”的 WebSocket 连接失败:帧头 red.min.js:16 无效
这是 Safari 控制台中的错误:
WebSocket 连接到“ws://myapp.mybluemix.net/red/comms”失败:如果没有协商的 deflate-frame 扩展,压缩位必须为 0
此设置对于 localhost 运行良好,但我不确定为什么这会在 Bluemix 上引发错误。