React的跨域问题处理

简介: React的跨域问题处理

第一步:在package.json里面加proxy



网络异常,图片无法展示
|


这个proxy必须要是String类型,并且是本地需要跨域的路径


"proxy": "http://localhost:3000"
复制代码


第二步: 设置setupProxy.js, 设置跨域路径设置



在src下面,新建setupProxy.js,代码如下


const {createProxyMiddleware} = require("http-proxy-middleware");
module.exports = function (app) {
//   app.use(
//     createProxyMiddleware("/apis", {
//       target: "https://xxx.xxx.cn",    // 需要跨域的网址
//       changeOrigin: true,     //跨域
//     })
//   )
app.use(
    createProxyMiddleware("/api", {  //   这个/api,就是识别的请求路径拼接,告诉请求,当什么请求时,需要用到这里跨域
      target: "https://c.m.163.com/ug",
      changeOrigin: true,     //跨域
    })
  )
}
复制代码


然后就ok啦~

可以跨域请求鸟


import React from 'react'
import ReactDom from 'react-dom'
import axios from 'axios'
(async function() {
  const url = '/api/wuhan/app/data/list-total?t=' + new Date().getTime()
  const res = await axios.get(url)
  console.log(res)
}())
复制代码


网络异常,图片无法展示
|


\

第二步有一个深坑 (React中代理异常Proxy is not a function)

问题: 官方给出的proxy配置文档 (www.html.cn/create-reac…

如下


const proxy = require('http-proxy-middleware');
module.exports = function(app) {
  app.use(proxy('/api', { target: 'http://xxx.xxx.com' }));
};
复制代码


启动报错如下


proxy is not a function
error Command failed with exit code 1.
复制代码


解决方案:查询npm的http-proxy-middleware,发现1.x做了较大改动。

文档(www.npmjs.com/package/htt…

正确写法:


const {createProxyMiddleware} = require('http-proxy-middleware');
module.exports = function(app) {
  app.use(createProxyMiddleware('/api', { target: 'http://localhost:5000/' }));
};
// 或者
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
  app.use(proxy.createProxyMiddleware('/api', { target: 'http://localhost:5000/' }));
};
复制代码


片尾: http.js配置



import axios from 'axios'
import qs from 'qs'
axios.defaults.baseURL = 'https://c.m.163.com/ug/'
axios.defaults.withCredentials = true
axios.defaults.timeout = 100000
let http = { post: '', get: '' }
http.post = (api, data) => {
    const params = qs.stringify(data)
    return new Promise((resolve, reject) => {
        axios.post(api, params).then(r => {
            resolve(r)
        }).catch(e => {
            reject(e)
        })
    })
}
http.get = (api, data) => {
    const params = qs.stringify(data)
    return new Promise((resolve, reject) =>{
        axios.get(api, params).then(r => {
            resolve(r)
        }).catch(e => {
            reject(e)
        })
    })
}
export default http


相关文章
|
前端开发 应用服务中间件 API
解决分布式React前端在开发环境的跨域问题
解决分布式React前端在开发环境的跨域问题
206 0
|
前端开发 JavaScript Java
【React工作记录九十八】记录一次艰难的云服务器部署前后端项目springBoot+mybatis+vue(两天解决的前后端跨域问题多种方式)...
【React工作记录九十八】记录一次艰难的云服务器部署前后端项目springBoot+mybatis+vue(两天解决的前后端跨域问题多种方式)...
145 0
|
前端开发 应用服务中间件 nginx
【React工作记录九十八】记录一次艰难的云服务器部署前后端项目springBoot+mybatis+vue(两天解决的前后端跨域问题多种方式)...
【React工作记录九十八】记录一次艰难的云服务器部署前后端项目springBoot+mybatis+vue(两天解决的前后端跨域问题多种方式)...
72 0
|
7月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
362 0
|
7月前
|
存储 前端开发 JavaScript
【第34期】一文学会React组件传值
【第34期】一文学会React组件传值
78 0
|
7月前
|
前端开发
【第31期】一文学会用React Hooks组件编写组件
【第31期】一文学会用React Hooks组件编写组件
80 0
|
7月前
|
存储 前端开发 JavaScript
【第29期】一文学会用React类组件编写组件
【第29期】一文学会用React类组件编写组件
77 0
|
7月前
|
前端开发 开发者
【第26期】一文读懂React组件编写方式
【第26期】一文读懂React组件编写方式
64 0
|
7月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
122 0
|
7月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
52 1