在Vite server.proxy["/api"].configure中获取POST请求体

问题描述 投票:0回答:1

我正在将一个项目从 Webpack 迁移到 Vite,并且遇到了将请求代理到 ASP.NET MVC 后端端点之一的问题。

由于现有项目的情况,我需要手动处理某些调用 - 例如在登录页面的初始页面加载时,检查用户是否已经通过身份验证并重定向到主页。

我正在尝试弄清楚如何使用

server.proxy.configure
来处理这些请求。我对
GET
请求处理得很好,但我似乎无法收到
POST
请求的正文数据。

这是我现在所拥有的:

  server: {
    proxy: {
      "/api": {
        target: "https://my.local.environment/",
        changeOrigin: true,
        configure: (proxy: HttpProxy.Server, options: ProxyOptions) => {
          proxy.on("proxyReq", (proxyReq, req, res, options) => {
            if (req.method === "GET") {
              //handle simple get requests. no problems here
              //...
            } else {
              const buffer = [];
              console.log("received post request");
              proxyReq.on("data", (chunk) => {
                console.log("received chunk");
                buffer.push(chunk);
              });
              proxyReq.on("end", () => {
                console.log("post request completed");
                const body = Buffer.concat(buffer).toString();
                
                const forwardReq = http.request(
                  {
                    host: "https://my.local.environment",
                    port: 443,
                    method: "POST",
                    path: req.url,
                    headers: {
                      "Content-Type": "application/json",
                      "Content-Length": data.length,
                    },
                  },
                  (result) => {
                    result.on("data", (d) => {
                      res.write(d);
                      res.end();
                    });
                  }
                );

                forwardReq.on("error", (error) => {
                  console.log(error);
                });

                forwardReq.write(data);
                forwardReq.end();
              });
            }
          });
        },
        secure: false,
      },
    }
  }

问题是

proxyReq.on("data", (chunk) => {
proxyReq.on("end", (chunk) => {
都没有真正触发。

此外,

req.body
未定义。

我完全不知道我应该在哪里获取

POST
请求的正文。

proxy configuration vite
1个回答
0
投票

我最终发现了一个关于

bypass
选项的不同问题,这给了我我正在寻找的解决方案。最终只处理我需要在本地处理的特定
GET
请求,而不是转发到我的部署环境,其他所有内容都由 vite 自动处理。

"/api": {
  target: "https://my.local.environment/",
  changeOrigin: true,
  agent: new https.Agent({
    keepAlive: true,
  }),
  bypass(req, res, proxyOptions) {
    if (req.method === "GET") {
      //... here I get what I need and write to the res object
      // and of course call res.end()
    }
    //all other calls are handled automatically
  },
  secure: false,
},
© www.soinside.com 2019 - 2024. All rights reserved.