【vue.js开发】如何在vue里面优雅的解决跨域,路由冲突问题
【vue.js开发】如何在vue里面优雅的解决跨域,路由冲突问题
当我们在路由里面配置成以下代理可以解决跨域问题
proxyTable: {'/goods/*': {target: 'http://localhost:3000'},'/users/*': {target: 'http://localhost:3000'}
},
这种配置方式在一定程度上解决了跨域问题,但是会带来一些问题,
比如我们的vue 路由 也命名为 goods,这时候就会产生了冲突,
如果项目中接口很多,都在这里配置是很麻烦的,也容易产生路由冲突。
如果把所有的接口,统一规范为一个入口,在一定程度上会解决冲突
把以上配置统一前面加上 /api/
proxyTable: {'/api/**': {target: 'http://localhost:3000'},
},
如果我们配置成这种方式,在使用http请求的时候就会发生变化,会在请求前面加上一个api,相对路由也会发生变化,也会在接口前面加上api,这样也会很麻烦,我们可以使用以下方式来解决这个问题
proxyTable: {'/api/**': {target: 'http://localhost:3000',pathRewrite:{'^/api':'/'}},
},
上面这个代码,就是把咱们虚拟的这个api接口,去掉,此时真正去后端请求的时候,不会加上api这个前缀了,那么这样我们前台http请求的时候,还必须加上api前缀才能匹配到这个代理,代码如下:
logout(){axios.post('/api/users/logout').then(result=>{let res = result.data;this.nickName = '';console.log(res);})},getGoods(){axios.post('/api/goods/list').then(result=>{let res = result.data;this.nickName = '';console.log(res);})}
我们可以利用axios的baseUrl直接默认值是 api,这样我们每次访问的时候,自动补上这个api前缀,就不需要我们自己手工在每个接口上面写这个前缀了
在入口文件里面配置如下:
import Axios from 'axios'
import VueAxios from 'vue-axios'Vue.use(VueAxios, Axios)
Axios.defaults.baseURL = 'api'
如果这配置 ‘api/’ 会默认读取本地的域
上面这样配置的话,不会区分生产和开发环境
在config 文件夹里面新建一个 api.config.js 配置文件
const isPro = Object.is(process.env.NODE_ENV, 'production')module.exports = {baseUrl: isPro ? 'http://www.vnshop.cn/api/' : 'api/'
}
然后在main.js 里面引入,这样可以保证动态的匹配生产和开发的定义前缀
import apiConfig from '../config/api.config'import Axios from 'axios'
import VueAxios from 'vue-axios'Vue.use(VueAxios, Axios)
Axios.defaults.baseURL = apiConfig.baseUrl
经过上面配置后,在dom里面可以这样轻松的访问,也不需要在任何组件里面引入axios模块了。
logout(){this.$http.post('/users/logout').then(result=>{let res = result.data;this.nickName = '';console.log(res);})
},
getGoods(){this.$http.post('/goods/list').then(result=>{let res = result.data;this.nickName = '';console.log(res);})
}
最终代码
在代理里面配置
proxyTable: {'/api/**': {target: 'http://localhost:3000',pathRewrite:{'^/api':'/'}},
},
在config里面的api.config.js 配置
在config 文件夹里面新建一个 api.config.js 配置文件
const isPro = Object.is(process.env.NODE_ENV, 'production')module.exports = {baseUrl: isPro ? 'http://www.vnshop.cn/api/' : 'api/'
}
关于生产和开发配置不太了解
可以去 dev-server.js 里面看配置代码
const webpackConfig = (process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'production') ?require('./webpack.prod.conf') :require('./webpack.dev.conf')
在main.js 入口文件里面配置
import apiConfig from '../config/api.config'import Axios from 'axios'
import VueAxios from 'vue-axios'Vue.use(VueAxios, Axios)
Axios.defaults.baseURL = apiConfig.baseUrl
在dom里面请求api的姿势
logout(){this.$http.post('/users/logout').then(result=>{let res = result.data;this.nickName = '';console.log(res);})},getGoods(){this.$http.post('/goods/list').then(result=>{let res = result.data;this.nickName = '';console.log(res);})}
【vue.js开发】如何在vue里面优雅的解决跨域,路由冲突问题相关推荐
- Spring Boot 2.X 如何优雅的解决跨域问题?
Spring Boot 2.X 如何优雅的解决跨域问题? 参考文章: (1)Spring Boot 2.X 如何优雅的解决跨域问题? (2)https://www.cnblogs.com/haha12 ...
- vue反向代理解决跨域及部署nginx端口转发解决跨域
1. 前言 本文是为了解决vue反向代理解决跨域及部署服务器nginx端口转发解决跨域,因为踩了不少的坑,百度了很多,也试了太多的方法,最终得以解决,所以记录一下,希望遇到同样问题的友友们可以高效的解 ...
- Vue + Nodejs + Express 解决跨域的问题
Vue + Nodejs + Express 解决跨域的问题 首先检测你的Vue的版本号 此文章针对3.0版本解决跨域问题 $ vue -V 2.X or 3.X 直接访问如下 created() { ...
- 使用 ThinkJS + Vue.js 开发博客系统
编者注:ThinkJS 作为一款 Node.js 高性能企业级 Web 框架,收到了越来越多的用户的喜爱.今天我们请来了 ThinkJS 用户 @lscho 同学为我们分享他基于 ThinkJS 开发 ...
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
2019独角兽企业重金招聘Python工程师标准>>> ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方 ...
- mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析
戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...
- js时间选择器_Vuestic Admin一款免费与美妙基于Vue.js开发的管理模板
Vuestic Admin 简介 vuestic admin是一款流行,免费与美妙的基于Vue.js开发出来的管理模板,包括38以上个定制用户界面组件,由Epicmax开发,由Vasili Savit ...
- 用Vue.js开发微信小程序:开源框架mpvue解析
前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...
- Vue CLI 3.0 正式发布,Vue.js 开发标准化工具
Vue CLI 3.0 已发布,该版本经历了重构,旨在: 减少现代前端工具的配置烦扰,尤其是在将多个工具混合在一起使用时: 尽可能在工具链中加入最佳实践,让它成为任意 Vue 应用程序的默认实践. V ...
最新文章
- [转]HDR渲染器的实现(基于OpenGL)
- 常考数据结构与算法:最长回文子串
- 推荐一个 Service Mesh 专栏
- dfs hdfs 修改文件名称_CDH6.3.2生产更换HDFS 数据目录
- SpringData+JPA+mysql, cannot be null when ‘hibernate.dialect‘ not set
- 数据仓库入门(实验6)添加层次结构
- linux单机配置DG过程记录
- Arduino颜色分类器
- 计算机任务栏隐藏恢复,电脑看不到任务栏怎么办 电脑任务栏不见了如何恢复...
- ECharts 饼图颜色设置教程 - 4 种方式设置饼图颜色
- 小游戏练手1——雷速小子
- java.lang.null_java.lang.nullpointerexception 怎么解决
- 热血江湖数据库MYSQL修改_热血江湖数据库修改终极教程-20070823更新
- C语言推箱子(带回退,撤回,返回上一步功能)
- 名帖157 王徽之 行楷《新月帖》
- 计算机视觉算法实习生:大厂面试经历(百度、京东、滴滴、字节、美团,旷视,快手,小米)
- 使用计算属性实现购物车功能效果(商品数量增减、单选多选计算金额和总价,)
- 测试apk-异常管控Gps攻击者开发
- GUI(用户图形界面)
- 电子商务的5大分类模式