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 相关文章推荐
ext combox 下拉框不出现自动提示,自动选中的解决方法
Feb 24 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
Feb 24 Javascript
通过js获取div的background-image属性
Oct 15 Javascript
原生js和jquery中有关透明度设置的相关问题
Jan 08 Javascript
JavaScript显示表单内元素数量的方法
Apr 02 Javascript
javascript等号运算符使用详解
Apr 16 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
编写高质量JavaScript代码的基本要点
Mar 02 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
简单实现js轮播图效果
Jul 14 Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
Prototype框架详解
2015/11/25 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
使用pdb模块调试Python程序实例
2015/06/02 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
任命书怎么写
2014/06/04 职场文书
小学生安全责任书
2014/07/25 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
通报表扬范文
2015/01/17 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js