http-proxy-middleware icon indicating copy to clipboard operation
http-proxy-middleware copied to clipboard

ResponseInterceptor recipe types mismatch

Open hotsummmer opened this issue 3 years ago • 7 comments

yarn why http-proxy-middleware OR npm ls http-proxy-middleware output (mask private folder names with *****)

[email protected] *****
├─┬ @types/[email protected]
│ └── [email protected] deduped
└── [email protected]

Describe the bug (be clear and concise)

TL; DR; When using responseInterceptor on onProxyRes, types doesn't match.

In detail...

I wanted to handle response. So I used a function on [onProxyRes] (https://github.com/chimurai/http-proxy-middleware/issues/97#issuecomment-268180448).

but I didn't get the response as I wanted.. (Response was broken and I think it's related to decompressing... it's not the issue I wanna report anyways)

So, instead of using this

proxyRes.on('data', ....) 

I used responseInterceptor with your recipe

I'm using Typescript also, and unfortunately, responseInterceptor's return value doesn't comply to onProxyRes.

Step-by-step reproduction instructions

I attached my code here.

https://gist.github.com/hotsummmer/387aba337e4a62ee0182a4587995f3db

Expected behavior (be clear and concise)

responseInterceptor expects arguments as below

(buffer: Buffer, proxyRes: http.IncomingMessage, req: http.IncomingMessage, res: http.ServerResponse)

but if I want to use it directly onProxyReq, types doesn't match.

Because onProxyRes expects this type.

onProxyRes: (
        proxyRes: IncomingMessage,
        req: Request,
        res: Response,
    ): void 

It works if I use any as expected type... or convert types before passing it to responseInterceptor. But wanted to ask you first about this issue

What http-proxy-middleware configuration are you using?

Line 16~33.

https://gist.github.com/hotsummmer/387aba337e4a62ee0182a4587995f3db

What OS/version and node/version are you seeing the problem?

MacOS 11.4, Node 12.18.3

Additional context (optional)

I appreciate your work and wonderful recipes! Happy to use it and contribute :) thanks ❤️

hotsummmer avatar Jul 01 '21 06:07 hotsummmer

Thanks for the kind words!

Think this has been fixed in this PR https://github.com/chimurai/http-proxy-middleware/pull/60.

But it hasn't been published yet.

chimurai avatar Jul 01 '21 20:07 chimurai

Just published v2.0.1.

onProxyRes is now typed as:

onProxyRes: (
  proxyRes: http.IncomingMessage,
  req: http.IncomingMessage,
  res: http.ServerResponse
): void 

Hopefully it won't give conflicts anymore.

Let me know if the issue persists.

chimurai avatar Jul 01 '21 20:07 chimurai

Just published v2.0.1.

onProxyRes is now typed as:

onProxyRes: (
  proxyRes: http.IncomingMessage,
  req: http.IncomingMessage,
  res: http.ServerResponse
): void 

Hopefully it won't give conflicts anymore.

Let me know if the issue persists.

Wow. Thanks for taking care of it right away 👍 I will check on it!

hotsummmer avatar Jul 02 '21 08:07 hotsummmer

Due to the change of the req type from Request to req: http.IncomingMessage, Typescript now complains when using req.get to retrieve header values when using the middleware with Expressjs. Could the types possibly be extended here so that both are compatible?

alsoscotland avatar Jul 10 '21 19:07 alsoscotland

@alsoscotland Could you share the code snippet you're using?

chimurai avatar Jul 10 '21 22:07 chimurai

@chimurai sure. Thanks for the quick response: Here is a simplified version. Essentially for the case where I want to pass some headers through from the original request to the proxy request

export const onProxyReqFn = (
        proxyReq: ClientRequest,
        req: Request
        // res: Response
    ) => {
    const authHeader = req.get('authorization');
    if (authHeader) {
        proxyReq.setHeader('authorization', authHeader);
    }
};

alsoscotland avatar Jul 11 '21 02:07 alsoscotland

Does this break the documentation? I'm getting '[object Object]' when running const response = responseBuffer.toString('utf8');

BinarySpike avatar Aug 17 '21 19:08 BinarySpike