@legacy_js

Не отрабатывает метод в http-proxy-middleware, как исправить?

С одного сервиса отправляю запрос на адрес например gateway:3000/users, проксирую с помошью библиотеки http-proxy-middleware на webamqplib:5557.
Работает, если использую функцию
users.module.ts
// reverse-proxy-middlewareBuilder.ts

import { Request, Response, NextFunction } from 'express';
import { createProxyMiddleware, Filter, Options, RequestHandler } from 'http-proxy-middleware';
import { MiddlewareBuilder } from '@nestjs/core';

export function ReverseProxyMiddleware(req: Request, res: Response, next: NextFunction) {
  const proxy = createProxyMiddleware(req.path, {
    target: 'http://webamqplib:5557/',
    changeOrigin: true,
  })
  proxy(req, res, next)
}

все хорошо отрабатывает, в консоле этого сервиса [HPM] Proxy created: /users -> webamqplib:5557
Модуль users.module.ts
// users.module.ts

import { MiddlewareConsumer, Module, NestModule, Param } from '@nestjs/common';
import { ReverseProxyMiddleware } from 'src/reverse-proxy.middleware';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
  controllers: [UsersController],
  providers: []
})
export class UsersModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
      consumer
      .apply(ReverseProxyMiddleware)
      .forRoutes(UsersController)
  }
}


Не могу понять, почему не отрабатывает через class
import { Request, Response, NextFunction } from 'express';
import { Injectable, NestMiddleware } from '@nestjs/common';
import { createProxyMiddleware, Filter, Options, RequestHandler } from 'http-proxy-middleware';
import configs from './config/config.json';

@Injectable()
export class ReverseProxyMiddleware implements NestMiddleware {
  private proxy(path: Filter | Options, option?: Options): RequestHandler {
    return createProxyMiddleware(path, option)
  }

  use(req: Request, res: Response, next: () => void) {
    this.proxy(
        req.path, 
        {
          target: configs.users.target,
          changeOrigin: true
        }
      )
    next()
  }
}

При запросе gateway:3000/users в консоле все так же выводится [HPM] Proxy created: /users -> webamqplib:5557, как и с помощью функции, но редиректа не происходить на адресс как в первом примере
  • Вопрос задан
  • 560 просмотров
Пригласить эксперта
Ответы на вопрос 1
alex_alekseichuk
@alex_alekseichuk
Software Developer
`proxy()` нужно вызвать, а не только создать.
Создать один раз, затем вызывать, когда нужно.

@Injectable()
export class ReverseProxyMiddleware implements NestMiddleware {
  ...
  constructor() {
    this.proxy = createProxyMiddleware({
      target: configs.users.target,
      changeOrigin: true
    });
  }

  use(req: Request, res: Response, next: () => void) {
    this.proxy(req, res, next);
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы