【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题

脚手架配置代理的两种方法

  • 一、通过Axios向服务器发送请求
  • 二、如何解决跨域(配置代理)——方法(单个服务器)
  • 三、如何解决跨域(配置代理)——方法二(多个服务器)

一、通过Axios向服务器发送请求

这里假设有后端接口,我就不放了

axios是通过promise实现对ajax技术的一种封装,实现网页的局部数据刷新

1、安装Axios第三方库:npm install axios

2、在component文件夹下新建AxiosDemo文件夹,里面包含一个index.jsx文件(用于编写模拟Ajax请求)

【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题_第1张图片

/*AxiosDemo/index.jsx*/
import React, { Component } from 'react';
//引入axios库
import axios from 'axios';

export default class Axios extends Component {
    handleRequest = () => {
        axios.get('http://localhost:5000/students').then(res => {
            console.log('学生数据', res)
        }, err => {
            console.log('出错了', err)
        })
    }
    render() {
        return (<div>
            <button onClick={this.handleRequest}>点击请求接口</button>
        </div>);
    }
}

3、在App.jsx中引入AxiosDemo组件

/*App.jsx*/
import React, { Component } from 'react';
import AxiosDemo from './components/AxiosDemo';

export default class APP extends Component {
  render() {
    return (
      <div id="root">
        <AxiosDemo />
      </div>
    );
  }
}

4、打开终端,输入npm start 运行项目

【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题_第2张图片

5、打开控制台,点击按钮,发现控制台报错。

【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题_第3张图片
错误的问题在于浏览器进行了跨域请求。

二、如何解决跨域(配置代理)——方法(单个服务器)

第一步:在package.json文件中配置proxy属性:目标服务器地址
【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题_第4张图片

第二步:修改Axios请求的地址为localhost:3000(原因是客户端需要通过代理去请求,但是代理的端口号是3000,所以客户端需要向端口为3000的代理进行请求)
【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题_第5张图片

第三步:点击按钮请求接口,查看浏览器控制台输出结果
【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题_第6张图片

请求成功!

注意:该方式存在局限性。代理首先查找前端项目,如果前端项目中有这个文件,那就获取前端的数据,不会找服务器要;如果前端项目中没有这个文件,那就会向localhost:5000这个服务器进行请求。但是如果客户端需要请求的数据来自不同的服务器,那就没办法请求多个服务器的接口了。

三、如何解决跨域(配置代理)——方法二(多个服务器)

1、在src文件夹下新建 setupProxy.js 文件,用于配置一个或多个代理

这里要注意,要引入createProxyMiddleware 而不是proxy,否则会有问题

/*setupProxy.js*/
//http-proxy-middleware不需要手动引入,在搭建脚手架的时候已经自动引入了
const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function (app) {
    app.use(
        createProxyMiddleware('/api1', {//遇见/api1前缀的请求,就会触发该代理
            target: 'http://localhost:5000',//请求发给谁
            changeOrigin: true,//控制服务器收到的请求头中Host的值
            pathRewrite: { '^/api1': '' }//重写请求路径
        }),
        createProxyMiddleware('/api2', {
            target: 'http://localhost:5001',
            changeOrigin: true,
            pathRewrite: { '^/api2': '' }
        })
    )
}

changeOrigin:true 指的是当客户端给服务器发送请求的时候,服务端接收到的是与服务端相同的地址
changeOrigin:false 指的是当客户端给服务器发送请求的时候,服务端接收到的是与服务端不相同的地址,但是也不会报错

2、然后在请求的接口地址中添加响应的代理标识(’’/api1或者/api2")

【React 全家桶】脚手架配置代理的两种方法——解决 React 跨域问题_第7张图片

3、点击按钮进行请求,查看浏览器控制台输出结果

在这里插入图片描述
请求成功!!!

以上就是脚手架配置代理的两种方法——解决 React 跨域问题的内容,请关注《React 全家桶》专栏。
我会将自己平时项目中常见的问题以及笔试面试的知识在CSDN与大家分享,一起进步,加油。

你可能感兴趣的:(React,全家桶,react.js,javascript,前端,前端框架,proxy)