我正在将一个项目从 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
请求的正文。
我最终发现了一个关于
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,
},