场景:服务器是国外的,使用项目自带的代理功能,并没有调用本地的VPN去请求接口,即使开了全局连接模式,导致请求非常慢。
解决方案
开启一个express进行代理
直接初始化一个express项目
命令省略,我用的webstorm
允许OPTIONS请求
app.all('*', (req, res, next) => {
if (req.method === 'OPTIONS') {
res.status(200);
}
next();
});
代理请求
axios.default.defaults.baseURL =
'https://xxxxx/factory-api/';
axios.default.defaults.headers = {
authorization: 'Basic bWFzdGVyOnBNUkFnQWpNZTFiSW5qMUI=',
token:
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIVFRQU19TRVJWRVIiLCJpYXQiOjE2NTAwODQ1MDQsImV4cCI6MTY1MDEyNzcwNCwidXNlcl9pZCI6IjQzIiwicGFzc3dvcmQiOiJiYmFkOGQ3MmMxZmFjMWQwODE3MjcxNTg4MDdhODc5OCJ9.O0EJlNhq1INgIP78gZr9zvzWTr7Q7e4hwO5k3RyQfto',
};
axios.default.defaults.proxy = {
host: 'localhost',
port: '7890',
protocol: 'http',
};
axios.default.defaults.httpsAgent = new https.Agent({
rejectUnauthorized: false,
});
const axiosGet = (req) => {
return axios.get(req.path, {
params: req.query,
});
};
const axiosPost = (req) => {
return axios.post(req.path, req.body);
};
app.post('*', async (req, res) => {
const result = await axiosPost(req);
res.send(result.data);
res.end();
});
app.get('*', async (req, res) => {
const result = await axiosGet(req);
res.send(result.data);
res.end();
});
前端
直接使用这个express的地址请求即可。
const request = axios.create({
baseURL: 'http://localhost:8005/',
timeout: 60000, // 请求超时时间
});
若有收获,就点个赞吧