react中的反向代理

王元肉==>个人主页

大家一起加油,我喜欢分专栏将知识打碎成一份一份小知识点,一篇文章只说一个知识点,因此每篇文章篇幅较短,希望大家不要介意。如有需要可以查看专栏看看是否有该文章中涉及到的知识点进行讲解的文章,如果大家觉得有帮助,希望大家三连支持一下。

推荐阅读

准备工作

使用create-react-app启动一个react项目
使用express编写一个不允许跨域的接口

使用express编写一个接口

  1. 创建文件夹 mkdir server
  2. cd server
  3. npm init -y
  4. npm i express
  5. 新建app.js编写服务器代码
const express = require('express');
const app = express();
app.get('/test', (req, res) => {
    res.json({
        message: 'success'
    });
})
app.listen(6789);
console.log("服务器启动成功");
  1. 控制台node app.js运行服务器端代码
  2. 浏览器调用自测
    在这里插入图片描述

为什么需要反向代理

App.js

import { useEffect } from "react";
import axios from "axios";
function App() {
  useEffect(() => {
    axios.get("http://localhost:6789/test").then(res => {
      console.log(res.data);
    }).catch(err => {
      console.log(err);
    })
  }, []);

  return (
    <div>App</div>
  );
}

export default App;

在这里插入图片描述

我们在reaact中使用axios调用刚才我们写好的接口,谷歌调试工具显示接口跨域。背后原因
是我们用express写的后端接口不允许跨域,然后本地的react项目和express服务器项目端口号不同,违背了同源策略。

react中怎么实现反向代理

react反向代理官方文档地址

  1. 下载包:npm install http-proxy-middleware --save
  2. 创建src/setupProxy.js并在其中放置以下内容
const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
    app.use(
        '/api',
        createProxyMiddleware({
            target: 'http://localhost:6789',
            changeOrigin: true,
            // 去掉我们添加的前缀,保证我们传递给后端的接口是正常的
            pathRewrite: { "^/api": '' }
        })
    );
};
  1. 给网络请求添加前缀
    App.js
import { useEffect } from "react";
import axios from "axios";
function App() {
  useEffect(() => {
    axios.get("/api/test").then(res => {
      console.log(res);
    }).catch(err => {
      console.log(err)
    })
  }, []);

  return (
    <div>App</div>
  );
}

export default App;

  1. 重新npm run start启动项目
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

结束啦!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuJie_Boom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值