http-proxy-middleware does not forward any of the path

Viewed 745

I am trying to configure a proxy for my API requests using http-proxy-middleware, which the create react app docs suggest. I set up my proxy like this, in the setupProxy.js file:

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function (app) {
    app.use(
        createProxyMiddleware("/post", {
            target: 'https://postman-echo.com',
            changeOrigin: true,
            logLevel: 'debug'
        })
    );
};

then, I do a simple POST to an endpoint:

const response = await fetch("/post", {
  method: 'POST',
  headers: {
    'content-type': 'application/json;charset=UTF-8'
  },
  body: JSON.stringify({ foo1: "bar1", foo2: "bar2" })
});

console.log(await response.json());

According to the http-proxy-middleware docs, I should expect a proxy that does something like this:

[HPM] POST /post -> https://postman-echo.com/post

But instead, the debugger shows this:

[HPM] POST /post -> https://postman-echo.com

The path, /post, does not get appended to the proxy request. The target should actually be https://postman-echo.com/post. My client gets a 404 error because https://postman-echo.com on its own does not match anything on the backend.

If it did reroute correctly, I should expect the same results as a CURL request

curl -X POST -F 'foo1=bar1' -F 'foo2=bar2' https://postman-echo.com/post

{"args":{},"data":{},"files":{},"form":{"foo1":"bar1","foo2":"bar2"},"headers":{"x-forwarded-proto":"https","x-forwarded-port":"443","host":"postman-echo.com","x-amzn-trace-id":"Root=1-61200c54-7b5809be3e78040f09edcd42","content-length":"240","user-agent":"curl/7.64.1","accept":"*/*","content-type":"multipart/form-data; boundary=------------------------bb54b419e41f4a4a"},"json":null,"url":"https://postman-echo.com/post"}%   

But I 404 because the path is not added. Why is the path being left out?

I created a simple app that recreates my issue. This looks similar to this issue but they are not the same (I am using the same syntax as the answer suggests).

1 Answers

I got it working. The problem was that I was testing with an endpoint that 404'd. I got confused because the debugger doesn't append /post to the end of the log like the docs say it should.

Related