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 相关文章推荐
导航跟随滚动条置顶移动示例代码
Sep 11 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
Oct 24 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
JavaScript Array对象扩展indexOf()方法
May 09 Javascript
详解JavaScript中的异常处理方法
Jun 16 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
May 13 Javascript
AngularJS动态绑定HTML的方法分析
Nov 07 Javascript
JavaScript触发onScroll事件的函数节流详解
Dec 14 Javascript
JS简单获取日期相差天数的方法
Apr 24 Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
Aug 20 Javascript
JS实现简单tab选项卡切换
Oct 25 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静态文件生成类实例分析
2015/01/03 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
PHP实现简易blog的制作
2016/10/24 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
javascript制作2048游戏
2015/03/30 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
Python写的一个简单监控系统
2015/06/19 Python
python实现学生管理系统
2018/01/11 Python
对python周期性定时器的示例详解
2019/02/19 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
python 基于wx实现音乐播放
2020/11/24 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
幼儿园开学家长寄语
2014/01/19 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
我的长生果教学反思
2014/04/28 职场文书
技术比武方案
2014/05/19 职场文书
经营理念口号
2014/06/21 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
React中的Context应用场景分析
2021/06/11 Javascript
mysql 排序失效
2022/05/20 MySQL
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python