【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里面优雅的解决跨域,路由冲突问题相关推荐

  1. Spring Boot 2.X 如何优雅的解决跨域问题?

    Spring Boot 2.X 如何优雅的解决跨域问题? 参考文章: (1)Spring Boot 2.X 如何优雅的解决跨域问题? (2)https://www.cnblogs.com/haha12 ...

  2. vue反向代理解决跨域及部署nginx端口转发解决跨域

    1. 前言 本文是为了解决vue反向代理解决跨域及部署服务器nginx端口转发解决跨域,因为踩了不少的坑,百度了很多,也试了太多的方法,最终得以解决,所以记录一下,希望遇到同样问题的友友们可以高效的解 ...

  3. Vue + Nodejs + Express 解决跨域的问题

    Vue + Nodejs + Express 解决跨域的问题 首先检测你的Vue的版本号 此文章针对3.0版本解决跨域问题 $ vue -V 2.X or 3.X 直接访问如下 created() { ...

  4. 使用 ThinkJS + Vue.js 开发博客系统

    编者注:ThinkJS 作为一款 Node.js 高性能企业级 Web 框架,收到了越来越多的用户的喜爱.今天我们请来了 ThinkJS 用户 @lscho 同学为我们分享他基于 ThinkJS 开发 ...

  5. 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+

    2019独角兽企业重金招聘Python工程师标准>>> ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方 ...

  6. mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...

  7. js时间选择器_Vuestic Admin一款免费与美妙基于Vue.js开发的管理模板

    Vuestic Admin 简介 vuestic admin是一款流行,免费与美妙的基于Vue.js开发出来的管理模板,包括38以上个定制用户界面组件,由Epicmax开发,由Vasili Savit ...

  8. 用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...

  9. Vue CLI 3.0 正式发布,Vue.js 开发标准化工具

    Vue CLI 3.0 已发布,该版本经历了重构,旨在: 减少现代前端工具的配置烦扰,尤其是在将多个工具混合在一起使用时: 尽可能在工具链中加入最佳实践,让它成为任意 Vue 应用程序的默认实践. V ...

最新文章

  1. [转]HDR渲染器的实现(基于OpenGL)
  2. 常考数据结构与算法:最长回文子串
  3. 推荐一个 Service Mesh 专栏
  4. dfs hdfs 修改文件名称_CDH6.3.2生产更换HDFS 数据目录
  5. SpringData+JPA+mysql, cannot be null when ‘hibernate.dialect‘ not set
  6. 数据仓库入门(实验6)添加层次结构
  7. linux单机配置DG过程记录
  8. Arduino颜色分类器
  9. 计算机任务栏隐藏恢复,电脑看不到任务栏怎么办 电脑任务栏不见了如何恢复...
  10. ECharts 饼图颜色设置教程 - 4 种方式设置饼图颜色
  11. 小游戏练手1——雷速小子
  12. java.lang.null_java.lang.nullpointerexception 怎么解决
  13. 热血江湖数据库MYSQL修改_热血江湖数据库修改终极教程-20070823更新
  14. C语言推箱子(带回退,撤回,返回上一步功能)
  15. 名帖157 王徽之 行楷《新月帖》
  16. 计算机视觉算法实习生:大厂面试经历(百度、京东、滴滴、字节、美团,旷视,快手,小米)
  17. 使用计算属性实现购物车功能效果(商品数量增减、单选多选计算金额和总价,)
  18. 测试apk-异常管控Gps攻击者开发
  19. GUI(用户图形界面)
  20. 电子商务的5大分类模式

热门文章

  1. Keras命名体识别(NER)实战---自然语言处理技术
  2. 深度学习核心技术精讲100篇(五)-通过CTR预估对比深度学习模型(deepfm)梯度提升模型(catboost)
  3. 【图像处理opencv】_图像基础
  4. LeetCode-剑指 Offer 50. 第一个只出现一次的字符
  5. NP-Hard问题及组合最优化问题
  6. 网上订票抢票攻略(亲测)
  7. RxJava在闲鱼系统吞吐量提升上的实践
  8. haproxy 学习记录
  9. 主要几种通信协议的性能比较(转载)
  10. XGBoost的基本使用应用Kaggle便利店销量预测