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

responseInterceptor uses more constrained types than onProxyRes provides

Open marchuffnagle opened this issue 2 years ago • 2 comments

Checks

Describe the bug (be clear and concise)

The onProxyRes option expects an OnProxyResCallback, which is defined as

export type OnProxyResCallback = (
  proxyRes: http.IncomingMessage,
  req: Request,
  res: Response
) => void;

The req and res parameters extend express's Request and Response.

The documentation demonstrates using responseInterceptor to build that callback. Although the onProxyRes is going to receive a Request instance, responseInterceptor only allows you to expect an http.IncomingMessage. It seems like you should be able to expect a Request for the req argument.

export function responseInterceptor(interceptor: Interceptor) {

where Interceptor is

type Interceptor = (
  buffer: Buffer,
  proxyRes: http.IncomingMessage,
  req: http.IncomingMessage,
  res: http.ServerResponse
) => Promise<Buffer | string>;

This came up as an issue for me because there is information in the express Request that I need to access in my onProxyRes callback, but can't in a type-safe manner.

Step-by-step reproduction instructions

n/a

Expected behavior (be clear and concise)

responseInterceptor should type req as Request and res as Response.

How is http-proxy-middleware used in your project?

n/a

What http-proxy-middleware configuration are you using?

n/a

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

n/a

Additional context (optional)

No response

marchuffnagle avatar Feb 11 '22 21:02 marchuffnagle

#721 converts:

  proxyRes: http.IncomingMessage,
  req: express.Request,

to

  proxyRes: http.IncomingMessage,
  req: http.IncomingMessage,

which I think satisfies your use case?

cdaringe avatar Feb 27 '22 01:02 cdaringe

Closed by #721

marchuffnagle avatar Feb 27 '22 14:02 marchuffnagle