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 常用函数
Dec 30 Javascript
Javascript 静态页面实现随机显示广告的办法
Nov 17 Javascript
jQuery :first选择器使用介绍
Aug 09 Javascript
js处理json以及字符串的比较等常用操作
Sep 08 Javascript
Jquery中Event对象属性小结
Feb 27 Javascript
jquery代码规范让代码越来越好看
Feb 03 Javascript
JavaScript手风琴页面制作
May 17 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
微信小程序开发技巧汇总
Jul 15 Javascript
VUE注册全局组件和局部组件过程解析
Oct 10 Javascript
vue导航栏部分的动态渲染实例
Nov 01 Javascript
Element PageHeader页头的使用方法
Jul 26 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桌面中心(一) 创建数据库
2007/03/11 PHP
深入php list()函数的详解
2013/06/05 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
php使用GeoIP库实例
2014/06/27 PHP
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Django Celery异步任务队列的实现
2019/07/24 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
大学生蛋糕店创业计划书
2014/01/13 职场文书
七年级生物教学反思
2014/01/30 职场文书
会计岗位说明书
2014/07/29 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
博士给导师的自荐信
2015/03/06 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
python前后端自定义分页器
2022/04/13 Python