我可以使用以下node-red.service嵌入带有自定义服务的node-red.js:
// Initializes the `node-red` service on path `/red`
const { NodeRed } = require('./node-red.class');
const hooks = require('./node-red.hooks');
const RED = require("node-red");
module.exports = function (app) {
const paginate = app.get('paginate');
const options = {
paginate
};
// Create the node-red settings object
const settings = {
httpAdminRoot:"/red",
httpNodeRoot: "/red",
userDir: "./red",
functionGlobalContext: { } // enables global context
};
// Initialise the runtime with a server and settings
RED.init(app,settings);
// Serve the editor UI from /red
app.use('/red' , RED.httpAdmin );
RED.start()
};
如果我转到localhost:3030/red,我会得到节点红色页面,但几秒钟后它失去了与服务器的连接,并出现以下错误:
WebSocket connection to 'ws://localhost:3030/red/comms' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
我认为通过 websocket 提供服务存在问题,或者可能是因为/red/comms 未在 feathersjs 中定义,它无法连接。知道吗?
谢谢
问题来自以下行:
// Initialise the runtime with a server and settings
RED.init(app,settings);
正如注释所说,您需要使用服务器对象初始化运行时。在这里,您正在向它传递一个快速应用程序,而不是服务器。
无法在快速应用程序上挂载 websocket 侦听器 - Node-RED 需要访问底层 HTTP 服务器对象。
我不熟悉 apis featherjs 提供的内容,但它似乎确实允许您访问 http 服务器对象 - 例如通过自己调用app.listen
- https://docs.feathersjs.com/api/express.html#app-listen-port