http-proxy-middleware
http-proxy-middleware copied to clipboard
ResponseInterceptor recipe types mismatch
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]
- [X] I understand project setup issues should be asked on StackOverflow or in GitHub Discussions.
- [X] I updated to latest
http-proxy-middleware
.
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 ❤️
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.
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.
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!
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 Could you share the code snippet you're using?
@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);
}
};
Does this break the documentation? I'm getting '[object Object]'
when running const response = responseBuffer.toString('utf8');