vue项目打包后怎样优雅的解决跨域


Posted in Javascript onMay 26, 2019

前言

在使用vue.js开发前端项目时,再结合webpack搞起各种依赖、各种插件进行开发,无疑给前端开发带来了很多便捷,就在解决跨域这个问题上,相信众多用vue.js的前端同僚们同我一样尝到了甜头,开发环境全靠proxyTable一通配置简直不要太酸爽。还不明所以然的新手们可能还没搞清我说的是什么,就是下面这几行配置:

proxyTable: {
   '/api': {
    target: 'http://113.113.113.113:5000', //假的接口地址哈
    changeOrigin: true,
    pathRewrite: {
     '^/api': ''
    }
   },

我们的跨域竟然就这样完美的解决了,然后就开始愉快的请求后端的接口啦!!

回到正题

具体场景:公司的一个h5项目是部署在客户端的,但是部署后出现bug了,由于多人协同开发且赶进度竟然是打包后因为CSS的问题多个页面布局乱了,但是开发环境并没有问题啊,怎么打完包样式就乱了?那就打开dist下的index.html看看呗,复现一下bug,想都不用想,页面没数据怎么复现,再去造一套假数据?作为一个不喜欢这样折腾的人必然是不想做这种事情的。

就不劳烦后端了,咱自己解决!

nginx 还是要会一些些的,自己配置一下,分分钟解决,哈哈!

server {
    listen    8082;
    server_name 127.0.0.1; //咱自己nginx服务器地址

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
      root  html;
      index index.html index.htm;
    }
  location /app-api {
      rewrite ^.+app-api/?(.*)$ /$1 break;
      include uwsgi_params;
      proxy_pass  http://113.113.113.113:5001/; //后端接口地址
      //关键部分start
      add_header Access-Control-Allow-Origin *;
      add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
      add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token';
      //关键部分end
      //以下配置参见nginx配置文档哈
      #Proxy Settings
      proxy_redirect   off;
      proxy_set_header  Host       $host;
      proxy_set_header  X-Real-IP    $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  Connection    close;
      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      proxy_max_temp_file_size 0;
      proxy_connect_timeout   90;
      proxy_send_timeout     90;
      proxy_read_timeout     90;
      proxy_buffer_size     4k;
      proxy_buffers       4 32k;
      proxy_busy_buffers_size  64k;
      proxy_temp_file_write_size 64k;
    }
}

目的是把后端接口用 nginx 再代理一遍,咱自己用 nginx 间接允许一下跨域请求!

start nginx //在nginx目录启动服务

通常我们会做一个统一的管理接口的js文件,如下形式

var BASE_URL = '/api';
var isPro = process.env.NODE_ENV === 'production'
if(isPro){
 BASE_URL= 'http://113.113.113.113:5000', //线上或者测试地址
 //BASE_URL= 'http://127.0.0.1:8020', //nginx代理地址
 //当我们需要打包后依然能正常调接口的时候用这个  
}
const UrlConfig = {
 getToken:BASE_URL + "某接口"
}
export default {
 UrlConfig
};

至此,就把打包后接口跨域的问题优雅的解决啦。

结语

因为公司的前后端项目通常都放在同一台服务器,或者不在同一台服务器的时候跨域也是靠后端的同志们去解决的,所以很少在生产环境中靠前端解决跨域的这项需求。不过我分享的这个小技巧也只适用于以上类似场景中,归根结底还是要在多人协同开发的过程中提前规划好公共以及个人的编程规范,尽量保证开发环境和生产环境是一致的,就可以摆脱很多类似的问题。

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

Javascript 相关文章推荐
prototype.js的Ajax对象
Sep 23 Javascript
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
Mar 12 Javascript
关于IE7 IE8弹出窗口顶上
Dec 22 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
Jul 25 Javascript
网络传输协议(http协议)
Nov 18 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
JS实现运动缓冲效果的封装函数示例
Feb 18 Javascript
vue中设置height:100%无效的问题及解决方法
Jul 27 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 Javascript
javascript实现前端分页效果
Jun 24 Javascript
手把手教你实现 Promise的使用方法
Sep 02 Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 #Javascript
vue实现的请求服务器端API接口示例
May 25 #Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 #Javascript
泛谈JS逻辑判断选择器 || &&
May 24 #Javascript
了解JavaScript中的选择器
May 24 #Javascript
Javascript通过控制类名更改样式
May 24 #Javascript
redux.js详解及基本使用
May 24 #Javascript
You might like
PHP 文件上传功能实现代码
2009/06/24 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
老生常谈js数据类型
2017/08/03 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
Python绑定方法与非绑定方法详解
2017/08/18 Python
django如何自己创建一个中间件
2019/07/24 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
什么是.net
2015/08/03 面试题
函授毕业个人自我评价
2014/02/20 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
平安工地建设方案
2014/05/06 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
Python requests用法和django后台处理详解
2022/03/19 Python