chimurai / http-proxy-middleware

:zap: The one-liner node.js http-proxy middleware for connect, express, next.js and more
MIT License
10.62k stars 825 forks source link

Proxy request fails due to bodyParser #949

Closed yvanlok closed 8 months ago

yvanlok commented 9 months ago

Checks

Describe the bug (be clear and concise)

When I utilise body-parser to read req.body, the request fails due to a timeout.

Step-by-step reproduction instructions

1. apiRoutes.js:

const defaultOptions = {
  target: TARGET_1,
  changeOrigin: true,
  followRedirects: true,
  onProxyReq: (proxyReq, req, res) => {
    proxyReq.setHeader("Authorization", `Bearer ${API_KEY_1}`);
  },
};
// Route /v1/chat/completions
router.use(
  "/v1/chat/completions",
  corsMiddleware,
  chatCompletionsLimiterMinute,
  chatCompletionsLimiterHour,
  bodyParser.json(),
  createProxyMiddleware({
    ...defaultOptions,
    router: function (req) {
      console.log(JSON.stringify(req.body));
      return "*****";
    },
  })
);

2. app.js
import apiRoutes from "./apiRoutes.js";
app.use(apiRoutes);

Expected behavior (be clear and concise)

I should expect to be able to read req.body and also the request should be successful.

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

http-proxy-middleware@2.0.6

What http-proxy-middleware configuration are you using?

const defaultOptions = {
  target: TARGET_1,
  changeOrigin: true,
  followRedirects: true,
  onProxyReq: (proxyReq, req, res) => {
    proxyReq.setHeader("Authorization", `Bearer ${API_KEY_1}`);
  },
};
// Route /v1/chat/completions
router.use(
  "/v1/chat/completions",
  corsMiddleware,
  chatCompletionsLimiterMinute,
  chatCompletionsLimiterHour,
  bodyParser.json(), // Add body-parser here
  createProxyMiddleware({
    ...defaultOptions,
    router: function (req) {
      console.log(JSON.stringify(req.body));
      return "https://api.naga.ac";
    },
  })
);

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

System:
    OS: Windows 10 10.0.22621
    CPU: (12) x64 AMD Ryzen 5 5600X 6-Core Processor
    Memory: 18.80 GB / 31.91 GB
  Binaries:
    Node: 20.5.1 - C:\Program Files\nodejs\node.EXE
    Yarn: 1.22.19 - ~\AppData\Roaming\npm\yarn.CMD
    npm: 10.1.0 - C:\Program Files\nodejs\npm.CMD
  Utilities:
    Git: 2.41.0.
    Curl: 8.0.1 - C:\Windows\system32\curl.EXE
  IDEs:
    VSCode: 1.83.1 - C:\Users\*****\AppData\Local\Programs\Microsoft VS Code\bin\code.CMD
  Languages:
    Python: 3.11.5
  Browsers:
    Internet Explorer: 11.0.22621.1

Additional context (optional)

No response

yvanlok commented 8 months ago

Fixed by adding this line:

onProxyReq: (proxyReq, req, res) => {
    proxyReq.setHeader("Authorization", `Bearer ${API_KEY_1}`);
    proxyReq.write(JSON.stringify(req.body));
  }