NodeJS调用本地VPN请求接口

2,686 阅读1分钟

场景:服务器是国外的,使用项目自带的代理功能,并没有调用本地的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, // 请求超时时间
});

若有收获,就点个赞吧