Вставить экземпляр класса родителя в экспортированную функцию модуля? - PullRequest
0 голосов
/ 14 апреля 2020

Это может быть очень плохой идеей, которая может объяснить, почему я не вижу примеров этого. Мой пример включает express и websocket, но это действительно базовый c javascript вопрос, под Node.js.

Мое приложение верхнего уровня создает пользовательский экземпляр класса сервера websocket, а также вызывает express маршруты:

const express = require('express');
const app = express();
const wss = new MyCustomWsServer();

app.use('/example', example);
...

Мой example модуль реализует класс c express маршрут:

const express = require('express');
const router = express.Router();

router.get('/',
  (req, res, next) => {
    console.log('ok!');
    res.status(200).end();
    return next();
  });

module.exports = router;

Я хотел бы иметь возможность передать ссылку на мой wss экземпляр модуля маршрутизации example, выполняющий что-то вроде этого:

app.use('/example', example(wss));

Цель состоит в том, чтобы иметь возможность использовать этот экземпляр wss внутри моего маршрута, где консоль записывает 'ok' .. .

Вопрос определенно НЕ в том, как использовать маршруты, ws et c ... В конечном итоге мой ws будет обрабатываться другим экземпляром сервера, передавать ему сообщения через очередь redis et c. ...

Это просто быстрый взлом, но я не мог понять это (изучая js). Цель состоит в том, чтобы предоставить доступ к этому экземпляру wss различным модулям маршрута.

Есть идеи? Спасибо.

1 Ответ

1 голос
/ 14 апреля 2020

Грубо говоря, вы всегда можете создать функцию, которая принимает произвольный параметр и что-то с ним делает, потому что закрывает .

В этом случае звучит как вы хотите что-то (очень грубо), как это:

приложение. js

import example from './example'

const wss = new MyCustomWsServer()

app.use('/example', example(wss))

пример. js

const express = require('express')
const router  = express.Router()

const example = wsServer => {
  router.get('/', (req, res, next) => {
    // Do whatever you want with wsServer here.
  })

  return router
}

export default example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...