Запустите промежуточное программное обеспечение Express для соединений Websocket - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть приложение Express с некоторыми промежуточными программами и сервер Apollo с подписками. Я думаю, что это должен быть соответствующий код установки:

const app = express();
const ws = createServer(app);

app.use(cookieParser());
app.use(
  expressJwt({
    secret: config.auth.jwt.secret,
    credentialsRequired: false,
    getToken: req => req.cookies.id_token,
  }),
);
app.use(passport.initialize());

const server = new ApolloServer({
  ...schema,
  subscriptions: {
    path: '/subscriptions',
    onConnect: (connectionParams, webSocket) => {
      // TODO
      return {};
    },
  },
});
server.applyMiddleware({ app });
server.installSubscriptionHandlers(ws);

JWT сохраняется в файле cookie и извлекается и обрабатывается cookieParser() и expressJwt(...). На TODO у меня есть доступ к webSocket.upgradeReq.headers.cookie, и я мог бы сделать это и здесь, чтобы добавить его в контекст веб-сокета. Тем не менее, особенно в связи с аутентификацией, я бы предпочел не использовать свою собственную версию соответствующего промежуточного программного обеспечения или дублировать всю аутентификацию.

Какой хороший способ сделать это? Я хочу применить серию промежуточного программного обеспечения к webSocket.upgradeReq (по крайней мере, промежуточное программное обеспечение, которое я определил как релевантное до сих пор, не касайтесь ответа), насколько это возможно, в соответствии с обычным процессом. Я рассматриваю

  • с использованием библиотеки (я видел express-websocket , но он кажется бездействующим, а вещи с буфером - жуткими),
  • создание второго экземпляра Express и подключение чего-либо,
  • с использованием одного компонента из Express (Router?),
  • вызов промежуточного программного обеспечения вручную,

но я недостаточно знаком со всем этим, чтобы понять, какой маршрут лучше.

...