react axios 跨域访问一个或多个域名
<h3>1.react + axios 跨域访问一个域名</h3><p>配置非常简单,只需要在当前的 package.json 文件里面配置:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">"proxy":"http://iot-demo-web-dev.autel.com", //当然,这里是一个假地址
</pre>
</div>
<p> 像这样:</p>
<p><img src="https://img2020.cnblogs.com/blog/1994217/202004/1994217-20200411144823401-1287620485.png"></p>
<p> </p>
<p> </p>
<p> 这样跨域便完成了,当然,也可以像网上那样,多几段代码,像这样:</p>
<p><img src="https://img2020.cnblogs.com/blog/1994217/202004/1994217-20200411144938730-1230492556.png"></p>
<p> </p>
<p> </p>
<p> 我不知道你们写入这段代码会怎么样,反正我是会报错,具体报错是怎么我这里没办法展示,因为我的项目已经 运行了 npm run eject 这个命令</p>
<p>报错的意思大概就是 proxy 希望得到的是一个字符串,而现在得到的是一个对象,所已我只能采取 第一张图片的方法进行跨域</p>
<p> </p>
<p>而后我们安装axios ,当然,其他的也行,在 src 目录项目建一个 api文件, 再在api文件里面建一个 user.js 写上下面这段代码</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">import axios from 'axios'
export function _user(data) {
return axios.get('device/detail', data)
}
</pre>
</div>
<p> 我这里的跨域使用的是第一张图片上的那种跨域</p>
<p> 在你需要发送请求的地方写上以下代码:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">import { _user } from '../api/user'
componentDidMount() {
let res = _user({})
console.log(res)
}
</pre>
</div>
<p> 接下来咱们就能愉快的获得后台给我们的数据了</p>
<p> </p>
<p>上面的那种跨域呢,可以说是非常方便,但是吧,如果后台给我们两个甚至三个不同的域名呢 怎么办,那我们就得使用插件</p>
<p> </p>
<h3>2.react +axios 跨域访问多个域名</h3>
<p>安装插件:npm install --save http-proxy-middleware</p>
<p>安装好了之后咱们是开始配置啦:</p>
<p> 1.首先运行命令将配置暴露出来</p>
<p> </p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">npm run eject
or
yarn eject
</pre>
</div>
<p> 在这里你可能会遇到一个报错:</p>
<p><img src="https://img2020.cnblogs.com/blog/1994217/202004/1994217-20200411150214739-109640072.png"></p>
<p> </p>
<p> </p>
<p> 那这个时候你可以将报错百度一下,或者跟着我继续操作</p>
<p> 报错的原因呢是因为咱们在使用脚手架搭建 react 时,系统会自动给我们添加一个 .gitignore 文件,如果你没有提交到仓库过,你就需要先提交到仓库</p>
<p> <img src="https://img2020.cnblogs.com/blog/1994217/202004/1994217-20200411150452527-116165625.png"></p>
<p> </p>
<p> </p>
<p> 完成这两步之后就可以继续 命名 npm run eject ,等配置文件暴露完成之后,你的 package.json 可能非常多配置,咱们不用管,在 src 下面建一个 setupProxy.js 在里面写上下面代码:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">const { createProxyMiddleware } = require('http-proxy-middleware')
module.exports = function (app) {
app.use(
createProxyMiddleware('/api', {
target: 'http://iot-demo-web-server-dev.autel.com',
changeOrigin: true,
})
)
app.use(
'/sys',
createProxyMiddleware({
target: 'http://localhost:5001',
changeOrigin: true,
})
);
}
</pre>
</div>
<p> </p>
<p> 找到 scripts 路径 打开 strat.js</p>
<p> <img src="https://img2020.cnblogs.com/blog/1994217/202004/1994217-20200411151621695-1843235013.png"></p>
<p> </p>
<p> </p>
<p> 在第 117行左右 写上下面代码:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">require('../src/setupProxy')(devServer)//注意路径是否正,是你刚才建的那个文件
</pre>
</div>
<p> <img src="https://img2020.cnblogs.com/blog/1994217/202004/1994217-20200411151838661-1616124867.png"></p>
<p> </p>
<p> </p>
<p> 如此 多个跨域便成功了,值得注意的就是, 需要在你请求的具体路径前面加上 api 或 sys 像这样</p>
<p><img src="https://img2020.cnblogs.com/blog/1994217/202004/1994217-20200411152216470-214929509.png"></p>
<p> </p>
<h3> ps: 虽然这篇教程不值钱,但也是本人辛苦创作,如需转载,请附上原文连接,谢谢!</h3><br><br>
来源:https://www.cnblogs.com/SuperBrother/p/12679928.html
頁:
[1]