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 相关文章推荐
javascript获得CheckBoxList选中的数量
Oct 27 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
jquery操作angularjs对象
Jun 26 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
ES6通过babel转码使用webpack使用import关键字
Dec 13 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
JS实现Cookie读、写、删除操作工具类示例
Aug 28 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 jQuery
vue项目中引入Sass实例方法
Aug 27 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
Python实现单词拼写检查
2015/04/25 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python 实现识别图片上的数字
2019/07/30 Python
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
优秀毕业生自我鉴定
2014/01/19 职场文书
优秀毕业生求职信
2014/06/05 职场文书
死者家属慰问信
2015/03/24 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫