vue 开发和生产的跨域问题
开发阶段
在开发环境与后端调试的时候难免会遇到跨域问题,在 vue 项目中常用的是 proxyTable,这个用起来很方便。
打开 config 文件夹下面的 index.js,找到 dev 开发模式的 proxyTable,添加以下代码即可:
proxyTable: {
'/api': {
target: 'http://xxx.xxx.xxx/', // 开发阶段,接口的域名
changeOrigin: true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
secure: true, // 如果是https接口,需要配置这个参数
pathRewrite: { // 路径重写,
'^/api': '/api' // 替换target中的请求地址,也就是说以后你在请求http://api.jisuapi.com/XXXXX这个地址的时候直接写成/api/XXXXX即可。
}
}
},
在需要调用的接口前加上 "/api" 即可
const menu = (params) => {
return axios.get("/api/menu",params).then(res => res.data)
};
上述方法在开发阶段是没问题的,但是上线的时候,换成正式服务器,就不行了,因为路径中出现了 api 字符,并且生产和开发模式的域名可能不一致。
生产阶段
上线的时候,路径 "www.xxx.com:8080/api/menu" 中的 api ,如果真实接口中没有 api 这一层,路径就会报错。真实接口是 "www.xxx.com:8080/menu"
解决方案:分别区分两种模式,然后拼接接口,具体如下。
const rootUrl = process.env.NODE_ENV === 'development' ? '/api' : '';
const menu = (params) => {
return axios.get(rootUrl + '/menu', params).then(res => res.data)
};
上述方法可以实现开发和生产模式代码不用更改路径,但是没解决两种模式域名不一致的情况。
还可以分别在 /config/dev.env.js 和 /config/prod.env.js 中分别设置 API_ROOT,然后取出再做接口的拼接。
//config/dev.env.js文件中
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
API_ROOT: '"/api"'
}) //config/prod.env.js文件中
//生产阶段单独设置域名
module.exports = {
NODE_ENV: '"production"',
API_ROOT: '"http://baidu.xxx.com/"'
} //在接口调用的时候拼接
const rootUrl = process.env.API_ROOT; const menu = (params) => {
return axios.get(rootUrl + '/menu', params).then(res => res.data)
};
上述方法很好的解决了两种模式下路径中的 api 字符替换问题,并且域名也可以单独设置。
vue 开发和生产的跨域问题的更多相关文章
- vue dev开发环境跨域和build生产环境跨域问题解决
dev开发时解决请求跨域问题:config-index.js 配置代理dev: { env: require('./dev.env'), port: 8082, assetsSubDirectory: ...
- Vue Nginx反向代理配置 解决生产环境跨域
Vue本地代理举例: module.exports = { publicPath: './', devServer: { proxy: { '/api': { target: 'https://mov ...
- 开发环境Vue访问后端接口教程(前后端分离开发,端口不同下跨域访问)
原理:开发环境下的跨域:在node.js上实现请求转发,vue前端通过axios请求到node.js上,node.js将请求转发到后端,反之.响应也是,先到node.js上,然后转发vue-cil项目 ...
- nginx处理vue打包文件后的跨域问题
起因 在vue文件打包后,项目脱离了vue配置的反向代理配置,还是会报跨域的错误,或者直接打不开本地文件, 但是此刻我们想打开打包后的文件,测试一下文件有没有错误,因为经常会存在开发阶段没有问题,打包 ...
- 解决Django+Vue前后端分离的跨域问题及关闭csrf验证
前后端分离难免要接触到跨域问题,跨域的相关知识请参:跨域问题,解决之道 在Django和Vue前后端分离的时候也会遇到跨域的问题,因为刚刚接触Django还不太了解,今天花了好长的时间,查阅了 ...
- vue项目开发时怎么解决跨域
vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' header is prese ...
- VUE在开发环境下实现跨域
1. 跨域设置 VUE项目的 config文件夹下index.js文件中修改 dev: proxyTable中的内容(默认是没有内容的): 添加内容: '/list': { target: 'http ...
- vue+django分离开发的思想和跨域问题的解决
一.介绍 在前后端分离的开发过程中,会涉及到跨域的问题,比如本次个人使用的Django+vue的框架,在vue对Django进行响应,Django再将响应的数据返回给vue,vue在进行渲染,如果不设 ...
- vue-cli 前端开发,后台接口跨域代理调试问题
使用 webpack的方式开发的时候,前台开发过程中需要调用很多后台的数据接口,但是通常前后台分离的开发方式,后台的接口数据很可能是不方便或者是不能在前端同学的电脑上运行的,也就出现了所谓的跨域问题. ...
随机推荐
- 解决在使用gensim.models.word2vec.LineSentence加载语料库时报错 UnicodeDecodeError: 'utf-8' codec can't decode byte......的问题
在window下使用gemsim.models.word2vec.LineSentence加载中文维基百科语料库(已分词)时报如下错误: UnicodeDecodeError: 'utf-8' cod ...
- myeclipse新建javaweb项目,并部署到tomcat
myeclipse使用的版本: 新建web项目: File-->New-->Web Project,输入项目名称,选择J2EE规范. 完成后: JRE System Library是只要做 ...
- 【c语言】分配内存与释放内存
提示:现在内存区定出一片相当大的连续空间(如1000字节).然后开辟与释放都在此空间进行.假设指针变量p原已指向未用空间的开头,调用alloc(n)后,开辟了n个字节可供程序适使用.现在需要使 p的值 ...
- 一入OI深似海 4 —— 纪念我最后一次PJ(中)
不知道怎么回事,直到比赛前10分钟才放我们进考场. 考场在体育馆里面,很大很壮观. 我匆匆忙忙地找到位子,屁股还没坐热,被老师告知不能带水. what?! 于是我只好把水放在统一放私人物品的地方. 电 ...
- css 3 新特性
CSS3的新特性大致分为以下六类 1.CSS3选择器 2.CSS3边框与圆角 3.CSS3背景与渐变 4.CSS3过渡 5.CSS3变换 6.CSS3动画 下面分别说一说以上六类都有哪些内容 CSS3 ...
- 你不知道的CSS
white-space: pre-line;//P标签自动换行
- 定时任务调度工作(学习记录 三)timer其他重要函数
TimerTask的两个重要函数: 1.cancel() 作用: 取消当前TimerTask里的任务 演示: 先在继承了TimerTask的类中添加一个计时器,然后在run方法中合适的位置添加canc ...
- HTML一
什么是前端: 前端,也称web前端对于网站来说,通常是指网站的前台部分,通俗点就是用户可以看到的部分, 浏览器.APP.应用程序的界面展现和用户交互就是前端 前端要学习那些技术:html+css+ja ...
- 内存溢出OOM
如何避免OOM 异常? 想要避免OOM 异常首先我们要知道什么情况下会导致OOM 异常. 1.图片过大导致OOM Android 中用bitmap 时很容易内存溢出,比如报如下错误:Java.lang ...
- Luogu4491 [HAOI2018]染色 【容斥原理】【NTT】
题目分析: 一开始以为是直接用指数型生成函数,后来发现复杂度不对,想了一下容斥的方法. 对于有$i$种颜色恰好出现$s$次的情况,利用容斥原理得到方案数为 $$\binom{m}{i}\frac{P_ ...