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

IT技术 node.js reactjs express axios
2021-05-13 15:51:03

我正在使用一个名为“并发”的包在本地主机上同时运行我的客户端和服务器。客户端运行在 3000 端口,而服务器运行在 5000 端口。我在 server 的 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 发出请求。这是什么问题?

4个回答

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

据我了解您的问题,您需要的是参考 Axios 开发人员文档。暂时的。 检查这个

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,
});

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

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

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

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

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