Встроенный красный узел в приложении feathersjs получает ошибку websocket - PullRequest
0 голосов
/ 20 сентября 2019

Я могу встроить узел-красный с помощью пользовательского сервиса со следующим узлом-red.service.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

Я думаю, что есть проблема с обслуживанием через веб-сокет, или, возможно, поскольку / red / comms не определен в feathersjs, он не может подключиться.Есть идеи?

Спасибо

1 Ответ

1 голос
/ 20 сентября 2019

Проблема возникает с этой строкой:

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

Как говорится в комментарии, вам нужно инициализировать среду выполнения с server объектом.Здесь вы передаете ему приложение Express, , а не сервер.

Невозможно смонтировать прослушиватели веб-сокетов в приложении Express - Node-RED необходим доступ к базовому объекту HTTP-сервера.

Я не знаком с тем, что предоставляет apis featherjs, но, похоже, он позволяет вам получить доступ к объекту http-сервера - например, вызывая app.listen самостоятельно - https://docs.feathersjs.com/api/express.html#app-listen-port

...