返回
axios联调坑记:后端如何拿到代理路径与如何解决必要字段缺失
前端
2024-01-23 15:32:06
在项目联调过程中,常常会遇到一些稀奇古怪的问题,本文就记录了两个axios请求代理后遇到的问题及其解决方法。
1. 后端获取代理路径
在联调过程中,我们通常会使用代理服务器来模拟真实环境。当使用axios进行请求代理时,后端如何获取代理路径呢?
// 在前端代码中使用 axios 进行代理请求
axios.get('http://localhost:3000/api/user')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.log(error);
});
如上例所示,我们在前端代码中通过axios发送了一个请求,代理路径为http://localhost:3000
。但是,在后端代码中,我们并不能直接获取到这个代理路径。
为了解决这个问题,我们需要在后端代码中使用req.headers
来获取请求头中的x-forwarded-host
字段。这个字段的值就是代理路径。
// 在后端代码中获取代理路径
const proxyHost = req.headers['x-forwarded-host'];
console.log(proxyHost); // 输出:localhost:3000
这样,我们就可以在后端代码中获取到代理路径了。
2. axios代理请求后端报错“Required requ”
在使用axios进行请求代理时,我们还可能遇到另一个问题:后端报错“Required requ”。
Error: Request failed with status code 400
{
"error": "Bad Request",
"message": "Required requ"
}
这个问题的原因是,在使用axios进行请求代理时,需要在请求头中添加一个Origin
字段。这个字段的值就是前端代码中发送请求的域名。
// 在前端代码中添加 Origin 请求头
axios.get('http://localhost:3000/api/user', {
headers: {
Origin: 'http://localhost:8080'
}
});
这样,我们就可以在后端代码中获取到前端代码发送请求的域名了。
// 在后端代码中获取请求的域名
const origin = req.headers['origin'];
console.log(origin); // 输出:http://localhost:8080
这样,我们就解决了axios代理请求后端报错“Required requ”的问题。
以上就是axios请求代理时遇到的两个问题的解决方案。希望本文能帮助大家解决类似的问题。