使用axios发送请求时如何设置代理?

Posted

技术标签:

【中文标题】使用axios发送请求时如何设置代理?【英文标题】:How to set proxy when using axios to send requests? 【发布时间】:2020-01-19 01:51:55 【问题描述】:

我正在使用一个名为“并发”的包在本地主机上同时运行我的客户端和服务器。客户端运行在 3000 端口,服务器运行在 5000 端口。我在服务器的 package.json 中设置了代理,方式如下:

"proxy": "https://localhost:5000"

但是当我通过以下方式向客户发出请求时:

    const config = 
        headers: 
          'Content-Type': 'application/json'
        
      ;

    const res = await axios.post('/api/users', body, config);

上面写着:POST http://localhost:3000/api/users 404 (Not Found)。我不明白为什么,但是尽管设置了代理,但 axios 不断向端口 3000 而不是端口 5000 发出请求。问题是什么?

【问题讨论】:

我也遇到过类似的问题,但重启对我有帮助:) 杀死开发服务器和 npm start 或任何你使用的东西。 【参考方案1】:

我只想说,添加cors的解决方案不是解决方案。您需要在 package.json 中包含代理 "proxy" : "https://localhost:5000",您可能需要重新启动或其他 - 但如果您选择使用 cors,则您允许任何人访问您的 API。这意味着您的数据库对人们来说是开放的。密码、电子邮件、用户等。这一切都被泄露了。

【讨论】:

您好 - 我想确认一下,您的意思是重启机器,还是只重启服务器?【参考方案2】:

我让它正常工作。我所做的是:

1) 将axios.post('/api/users', body, config); 更改为axios.post('http://localhost:5000/api/users', body, config);

2) 然后在服务器端的'users' express 路由中,通过安装'cors' npm 包添加CORS功能,然后添加以下行:

const router = express.Router();
...
// add these lines
var cors = require('cors');
router.use(cors()); 
...
router.post('/', async (req, res) => 
...
);

【讨论】:

我通过将 proxy:localhost:5000 放入 package.json 然后将 axios.post('/api/users',body,config) 放入路由器中使事情正常工作,但是当我设置时事情停止工作向上调试 硬编码这不是一个好主意。拥有一个配置变量要好得多。如果您更改某些内容,您将硬编码所有对本地产品等的请求。def 不是要走的路。【参考方案3】:

据我了解您的问题,您需要参考 Axios 开发人员文档。暂时的。 check this

import axios,  AxiosInstance  from 'axios';
import * as tunnel from 'tunnel';
   const agent = tunnel.httpsOverHttp(
   proxy: 
     host: 'proxy.mycorp.com',
     port: 8000,
    ,
   );
const axiosClient: AxiosInstance = axios.create(
baseURL: 'https://some.api.com',
httpsAgent: agent,
);

【讨论】:

不,不是这个。此配置是当您在公司代理或其他东西后面时,这只是将本地 xhr 请求重定向到托管在不同端口的后端服务器。【参考方案4】:

在我的情况下,我没有检查好,看来调用实际上是转发到代理地址的 api 服务器。 检查服务器是否正在运行以及它是否正在接收您的呼叫。

【讨论】:

以上是关于使用axios发送请求时如何设置代理?的主要内容,如果未能解决你的问题,请参考以下文章

React 开发服务器不代理表单提交

axios FastMock 跨域 代理

关于vue和react中axios请求的拦截和响应拦截

如何使用 axios 的代理

vue.js学习之 跨域请求代理与axios传参

为啥代理在浏览器中不起作用(NuxtJS+Axios)?