Vue中跨域及打包部署到nginx跨域设置方法


Posted in Javascript onAugust 26, 2019

众所周知,我们在做前后端分离项目的时候,经常需要在本地起前端工程,接口希望拉取服务端的实际数据而不是本地的mock数据,而如果本地程序直接访问远程接口, 肯定会遇到跨域问题。

什么是跨域?实现跨域的多种方式?

这里我就不详细介绍了,大家自行百度哈

为什么要实现前端跨域

一般来讲,前后端分离的项目在大公司都会由后台设置允许跨域访问,因为后台设置允许跨域是很简单和方便的,但是某些情况下,一些小公司或者你工作的场所后台不怎么配合的情况下,这就需要前端来配置跨域请求来方便我们使用接口

vue项目中的配置

以vue-cli搭建的项目为例, 在webpack配置文件 /config/index.js, 由于我们是在 开发环境 下使用,自然而然是要配置在dev里面,找到 proxyTable属性,配置如下:

dev: {
  // Paths
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
  <!-- 使用proxyTable进行跨域设置 -->
  proxyTable: {
    '/api': {
     target: 'http://www.abc.com', // 设置你调用的接口域名和端口号, 别忘了加http
     changeOrigin: true, // 是否跨域
     pathRewrite: {
       // 这里理解成用'/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 
       // 比如我要调用'http://www.abc.com/user/add',直接写'/api/user/add'即可'
      '^/api': '/'
     }
    }
  },
  // Various Dev Server settings
  host: '0.0.0.0', // can be overwritten by process.env.HOST
  port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
  autoOpenBrowser: false,
  errorOverlay: true,
  notifyOnErrors: true,
  poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
  /**
   * Source Maps
   */
  // https://webpack.js.org/configuration/devtool/#development
  devtool: 'cheap-module-eval-source-map',
  // If you have problems debugging vue-files in devtools,
  // set this to false - it *may* help
  // https://vue-loader.vuejs.org/en/options.html#cachebusting
  cacheBusting: true,
  cssSourceMap: true
 },

上面proxyTable属性中的配置,效果就是将本地8080端口的一个请求代理到了http://www.abc.com这个域名下

'http://localhost:8080/api' ===> 'http://www.abc.com/'

注意: 以上设置只能在开发环境下使用,打包后会出现路径问题的 注意: Vue-cli提供的代理功能,只是让你在开发环境下使用的,它(http-server-middleware)依赖于node环境,生产代码应该使用npm run build然后把dist放到nginx服务器上,在nginx上配置代理地址 Vue项目部署到nginx上的跨域设置

这还没完,现在我们要将项目部署到nginx上,此时原来可以访问的接口又访问不到了,所以这个时候还要对nginx进行设置。

windows系统下载nginx 下载地址: nginx.org/en/docs/win…

Vue中跨域及打包部署到nginx跨域设置方法 

选择download进去选择下载版本页面

Vue中跨域及打包部署到nginx跨域设置方法 

这里选择稳定版

下载即可

Vue中跨域及打包部署到nginx跨域设置方法

下载完成后目录如下

Vue中跨域及打包部署到nginx跨域设置方法

进入cong文件,打开nginx.congf文件,找到server对象里面的listen属性查看查看监听的端口号(默认80端口)

Vue中跨域及打包部署到nginx跨域设置方法 

在nginx根目下启动nginx.exe,如果出现一个黑窗口一闪而过,说明启动成功,访问localhost:80出现此页面则访问成功

Vue中跨域及打包部署到nginx跨域设置方法
Vue中跨域及打包部署到nginx跨域设置方法

如果访问不成功有可能是端口被占用,修改上面的端口号,重启nginx即可, 浏览器访问localhost:XXXX Vue项目部署在nginx上的配置 vue项目运行 npm run build 进行项目打包记得有本地静态资源文件的需要需要webpack配置, 如下:

config文件下的index.js文件找到build属性
assetsPublicPath: '/'  =>>>>>  assetsPublicPath: './'

Vue中跨域及打包部署到nginx跨域设置方法

build文件下的untils文件中找到vue-style-loader
增加 publicPath: '../../'

Vue中跨域及打包部署到nginx跨域设置方法 

此时打包后的dist文件可以不放置服务器环境下访问, 直接打开dist文件目录下的index.html就可以打开访问

这时候的静态资源都可以被加载出来,且不会报错,但是api访问的话还是会报错

 

Vue中跨域及打包部署到nginx跨域设置方法

 将打包后的dist文件里面的内容复制一份到nginx文件中的html文件中

Vue中跨域及打包部署到nginx跨域设置方法

打开html文件清空里面的内容,将复制的内容粘贴进去

Vue中跨域及打包部署到nginx跨域设置方法

Vue中跨域及打包部署到nginx跨域设置方法

进入cong文件,

打开nginx.congf文件,找到server属性在里面新增一条配置

location /api {proxy_pass http://localhost:4000/;}

Vue中跨域及打包部署到nginx跨域设置方法

你要访问那个地址这里就修改为你要访问的那个地址复制代码

Vue中跨域及打包部署到nginx跨域设置方法 

以上配置就全部完成啦

注意: 修改完nginx中的配置一定要重启nginx才可以, 切记!!!

nginx简单的操作命令

nginx.exe -s stop // stop是快速停止nginx,可能并不保存相关信息
nginx.exe -s quit // quit是完整有序的停止nginx,并保存相关信息
nginx.exe -s reload // 当配置信息修改,需要重新载入这些配置时使用此命令
nginx.exe -s reopen // 重新打开日志文件
nginx -v // 查看Nginx版本

以上就是我在项目中使用的配置啦,还有一些更高级的配置还没有接触使用到,供大家参考

总结

以上所述是小编给大家介绍的Vue中跨域及打包部署到nginx跨域设置方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
javascript EXCEL 操作类代码
Jul 30 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
JavaScript字符串删除重复字符的方法
Dec 25 Javascript
Angular 4 指令快速入门教程
Jun 07 Javascript
js事件on动态绑定数据,绑定多个事件的方法
Sep 15 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
Sep 27 Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
Feb 15 Javascript
ES6新增的数组知识实例小结
May 23 Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
js实现跟随鼠标移动的小球
Aug 26 #Javascript
vue 源码解析之虚拟Dom-render
Aug 26 #Javascript
Node.js爬虫如何获取天气和每日问候详解
Aug 26 #Javascript
vue移动端实现手机左右滑动入场动画
Jun 17 #Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
Aug 26 #Javascript
JS阻止事件冒泡的方法详解
Aug 26 #Javascript
express框架中使用jwt实现验证的方法
Aug 25 #Javascript
You might like
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python中使用中文的方法
2011/02/19 Python
Python 正则表达式(转义问题)
2014/12/15 Python
Python中文竖排显示的方法
2015/07/28 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
Python self用法详解
2020/11/28 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
元旦晚会邀请函
2014/02/01 职场文书
初中班主任评语
2014/04/24 职场文书
红色影片观后感
2015/06/18 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
mysql函数之截取字符串的实现
2022/08/14 MySQL