在项目开发的时候,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们现在使用vue-cli进行项目打包的时候,我们在本地启动服务器后,比如本地开发服务下是 http://localhost:8080 这样的访问页面,但是我们的接口地址是 http://xxxx.com/save/index 这样的接口地址,我们这样直接使用会存在跨域的请求,导致接口请求不成功,因此我们需要在打包的时候配置一下,我们进入 config/index.js 代码下如下配置即可:
dev: { // 静态资源文件夹 assetsSubDirectory: 'static', // 发布路径 assetsPublicPath: '/', // 代理配置表,在这里可以配置特定的请求代理到对应的API接口 // 例如将'localhost:8080/api/xxx'代理到'www.example.com/api/xxx' // 使用方法:https://vuejs-templates.github.io/webpack/proxy.html proxyTable: { '/api': { target: 'http://xxxxxx.com', // 接口的域名 // secure: false, // 如果是https接口,需要配置这个参数 changeOrigin: true, // 如果接口跨域,需要进行这个参数配置 pathRewrite: { '^/api': '' } } }, // 本地访问 http://localhost:8080 host: 'localhost', // can be overwritten by process.env.HOST
接口地址原本是 /save/index,但是为了匹配代理地址,在前面加一个 /api, 因此接口地址需要写成这样的即可生效 /api/save/index。
注意: '/api' 为匹配项,target 为被请求的地址,因为在 ajax 的 url 中加了前缀 '/api',而原本的接口是没有这个前缀的,所以需要通过 pathRewrite 来重写地址,将前缀 '/api' 转为 '/'。如果本身的接口地址就有 '/api' 这种通用前缀,就可以把 pathRewrite 删掉。
补充知识:webpack -- 关于proxyTable的配置在开发环境和生产环境中的原理解析
前言
首先,proxyTable是我们在本地开发环境中调试接口用的,目的是为了解决本地跨域的问题,因为本地地址为localhost:xxxx/xxx
在线上的生产环境是没用的!!!
假设我们用的是vue-cli命令行工具生成的webpack项目模板,我们很容易能在config文件夹下面找到index.js文件。
本地如何配置
假设我要请求的地址为
'http://xxx.com/scada/json/aa.tpl'
我们在index.js文件中找到如下代码:我推荐了一种写法,后面我会说为什么
那么我请求的那段代码就是这样的
axios.get('/scada/json/aa.tpl').then((res) => { //........ })
稍微解释一下其中的原理:当发请求的时候,proxy就会起作用,他会在接口'/scada'前面加上 ‘http://xxx.com:123',成为 ‘http://xxx.com:123/scada/json/aa.tpl' 由于我们配置中的 pathRewrite字段需要将 '/scada'写为 ‘/scada',所以请求接口还是 ‘http://xxx.com:123/scada/json/aa.tpl'
继续向下看,干货还在后面
假设几种其它的写法
假设一
如果proxyTable配置是这样的
proxyTable: { '/scada': { target: 'http://xxx.com:123', changeOrigin: true, pathRewrite: { '^/scada': '/' } }
那么我们的请求代码必须写成这样
axios.get('/scada/scada/json/aa.tpl').then((res) => { //........ //是不是有点难受 })
假设二
如果proxyTable配置是这样的,也就是重新起个名字
proxyTable: { '/api': { target: 'http://xxx.com:123', changeOrigin: true, pathRewrite: { '^/api': '/' } }
那么我们的请求代码必须写成这样
axios.get('/api/scada/json/aa.tpl').then((res) => { //........ //这种写法还能接受,但是有个致命的缺点 })
再向下看,看看我推荐的写法的真真优势
打包上线的问题
这里只说代码上线之后和接口在同源情况下,如果不同源则存在跨域,这里先不考虑这种情况
假如我们把打包后的代码也部署到了 'http://xxx.com:123'上
上线后的代码为生产环境,没有了proxy
那么他是怎么解析请求的呢?比如下面这个请求
axios.get('/scada/json/aa.tpl').then((res) => { //........
})
由于 '/'表示的是根目录的意思,所以会解析为hostname + port + 请求的地址,即为 ‘http://xxx.com:123/scada/json/aa.tpl' ,没有一点问题,接口肯定能请求到
那么如果按照上面我说的假设一或者假设二的写法呢?
是不是会解析为 ‘http://xxx.com:123/scada/scada/json/aa.tpl' 和 ‘http://xxx.com:123/api/scada/scada/json/aa.tpl'
所以,假设一和假设二需要在打包之前修改请求地址才能打包,增加了许多不必要的麻烦
以上这篇webpack+vue-cil 中proxyTable配置接口地址代理操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 陈奕迅2023《CHIN UP》EAS MUSIC[WAV+CUE][1.2G]
- 黄心懋《曾经有个女孩》滚石首版[WAV+CUE]
- 群星《车宴(紫银合金AQCD)》[原抓WAV+CUE]
- 小骆驼《草原狼》[正版CD抓轨WAV+CUE]
- 群星.2011-剧集金曲精选2CD【永恒】【WAV+CUE】
- 林忆莲.1996-夜太黑【滚石】【WAV+CUE】
- 方皓玟.2009-UNLOCKME【东亚】【WAV+CUE】
- 群星《2024好听新歌22》十倍音质 U盘音乐[WAV分轨]
- 林宥嘉《神秘嘉宾》引进版[WAV分轨][1G]
- 2024罗志祥《舞狀元》[FLAC/MP3][1G]
- 张美玲侯俊辉1999-福建情歌对唱[南方][WAV+CUE]
- 江希文.1994-伝说少女(饿狼伝说动画原声大碟)【嘉音】【WAV+CUE】
- 黄思婷2020-风中泪[豪记][WAV+CUE]
- 刘韵.1998-DENON.MASTERSONIC系列【EMI百代】【WAV+CUE】
- 群星.2024-你的谎言也动听影视原声带【韶愔音乐】【FLAC分轨】