如何在vue里面优雅的解决跨域(路由冲突问题)


Posted in Javascript onJanuary 20, 2019

如何在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);
  })
 }

vuejs项目生产环境,上线解决跨域问题,请看以下文章

vue项目上线 看看这个文章,专门讲上线的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
div模拟滚动条效果示例代码
Oct 16 Javascript
JS中表单的使用小结
Jan 11 Javascript
纯JS实现动态时间显示代码
Feb 08 Javascript
js的延迟执行问题分析
Jun 23 Javascript
jQuery验证插件validate使用详解
May 11 Javascript
利用JS实现简单的瀑布流加载图片效果
Apr 22 Javascript
基于Vue实现timepicker
Apr 25 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
axios发送post请求,提交图片类型表单数据方法
Mar 16 Javascript
vue中keep-alive、activated的探讨和使用详解
Jul 26 Javascript
基于javascript实现放大镜特效
Dec 03 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 #Javascript
JavaScript中concat复制数组方法浅析
Jan 20 #Javascript
JavaScript中import用法总结
Jan 20 #Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 #Javascript
js序列化和反序列化的使用讲解
Jan 19 #Javascript
vue-router传参用法详解
Jan 19 #Javascript
vue-router实现嵌套路由的讲解
Jan 19 #Javascript
You might like
php htmlspecialchars加强版
2010/02/16 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
php生成图片验证码
2015/06/09 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
python 数据的清理行为实例详解
2017/07/12 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
安装python及pycharm的教程图解
2019/10/10 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
档案管理员岗位职责
2013/12/01 职场文书
护理专业自荐信
2013/12/03 职场文书
标准化管理实施方案
2014/02/25 职场文书
《落花生》教学反思
2014/02/25 职场文书
党支部公开承诺书
2014/03/28 职场文书
主管竞聘书范文
2014/03/31 职场文书
银行给客户的感谢信
2015/01/23 职场文书
沈阳故宫导游词
2015/01/31 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python