一篇看懂 vue 如何做调试后台接口的配置和 proxy 的工作原理 以及为什么能解决跨域

之前也做过不少vue项目了,每次跟后台配合的时候,有些配置总是会忘记,感觉每次的解决方案和上一次的都不一样,所以这次准备详细的记录一下,如何做配置,以及一些配置的含义

话不多说 直接开始

1.首先要想调取后台接口一定要引入的就是axios,所以第一步就是下载 axios

npm install axios

2.在需要调用接口的页面引入axios

import axios from 'axios'

2.1发送请求

axios({
        method: "post",
        url: "接口地址",
        data: this.data,
        headers: { "Content-Type": "multipart/form-data" },
      }).then(e => {
        console.log(e)
      })

此时不出意外控制台应该是报错了,应该是报的跨域的错,此时就要做一下对vue.config.js 文件的配置

2.2 vue.config.js
为什么要配置这么文件呢,配置这个文件的目的是什么呢?
因为我们知道浏览器和服务器之间会存在跨域问题,但是两个服务器之间确实可以随意访问的,所以我们要配置一个代理服务器来调用用服务器的接口,如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请求代理到 API 服务器,此时可以通过 vue.config.js 中的 devServer.proxy 选项来配置。

devServer: {
    port: '9080',
    open: true,
    proxy: {
      '/api': {
        target: 'http://192.168.2.108:9080/crm',//代理地址,这里设置的地址会代替axios中设置的baseURL
        secure: false, //如果是https接口需要进行此配置 
        changeOrigin: true,// 如果接口跨域,需要进行这个参数配置
        //pathRewrite方法重写url
        pathRewrite: {
          '^/api': '/aaa' //如果没有pathRewrite属性 调用的接口就是http://cloud/api/xxx/xxxx 如果有 pathRewrite属性 调用的接口就是 http://cloud/aaa/xxx/xxxx
         }
        }
      }
    },
   
  },

devServer里面proxy则是关于代理的配置,该属性为对象的形式,对象中每一个属性就是一个代理的规则匹配

属性的名称是需要被代理的请求路径前缀,一般为了辨别都会设置前缀为/api,值为对应的代理匹配规则,对应如下:
tip: 如果接口地址没有一个统一的前缀 如 /api 可以设置一个 axios.defaults.baseURL = ‘/api’ 即可为所有接口地址添加一个统一的前缀 /api

target:表示的是代理到的目标地址
pathRewrite:默认情况下,我们的 /api 也会被写入到URL中,如果希望删除,可以使用pathRewrite 如果你的接口中本身就带有 /api 可以不写 pathRewrite
secure:默认情况下不接收转发到https的服务器上,如果希望支持,可以设置为false
changeOrigin:它表示是否更新代理后请求的 headers 中host地址

3.工作原理

proxy实质就是一个代理服务器 这样就能理解 proxy 工作原理实质上是利用http-proxy-middleware 这个http代理中间件,实现请求转发给其他服务器

举个例子:

在开发阶段,本地地址为http://localhost:3000,该浏览器发送一个前缀带有/api标识的请求到服务端获取数据,但响应这个请求的服务器只是将请求转发到另一台服务器中

说的再通俗一点 就是 A(浏览器) 想认识(发请求) C(服务器) 但是 由于碍于面子(同源政策) 只能 通过 B(proxy) 来介绍,也就是 A 发送请求给 B 再由 B 转发请求给 C

4.跨域

在开发阶段,devServer 会启动一个本地开发服务器,所以我们的应用在开发阶段是独立运行在 localhost的一个端口上,而后端服务又是运行在另外一个地址上

所以在开发阶段中,由于浏览器同源策略的原因,当本地访问后端就会出现跨域请求的问题

通过设置 proxy 实现代理请求后,相当于浏览器与服务端中添加一个代理者

当本地发送请求的时候,代理服务器响应该请求,并将请求转发到目标服务器,目标服务器响应数据后再将数据返回给代理服务器,最终再由代理服务器将数据响应给本地

请添加图片描述

在代理服务器传递数据给本地浏览器的过程中,两者同源,并不存在跨域行为,这时候浏览器就能正常接收数据

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值