当前位置: 首页 > news >正文

VUE2 学习笔记15 代理

代理

前后端通信:当前后端通信时,在两个地址间发送ajax请求(xhr、jQuery、axios、fetch等),一般推荐使用axios,通过npm i axios安装,通过import axios from 'axios'引入。

跨域

前后端通信时,如果前后端的地址不同源(协议、端口、域名不一致)时,两个地址是无法进行通信的。在前后端不同源时,后端服务器会接收到前端的请求,服务器也会响应这个请求,前端浏览器也会接收这个响应,但是当浏览器检测到这个响应是跨域的响应时,不会把收到的后端服务器响应反馈给用户。

解决跨域

1.CORS 该方法与前端无关,是后端在服务器给前端进行响应时,配置响应头,浏览器在接收到这些响应头时会允许数据反馈给用户。

2.jsonp 借助script标签的src在引入外部资源时不受同源策略限制的机制,但在使用这种方法时,需要前端后端一起进行配置,而且只能解决get请求的问题,一般很少使用。

3.配置代理  配置代理时,相当于在前后端交互时,有一个代理服务器,代理服务器和前端的端口号一致,当前端向后端请求数据时,不直接给后端发送请求,而是把请求发给代理服务器,代理服务器把请求转发给后端服务器,代理接收到后端服务器的数据时(由于代理服务器和后端服务器都是服务器,服务器之间通过HTTP请求通信,也不存在跨域问题),代理服务器把数据反馈给前端。由于代理服务器和前端同源,因此也不存在跨域问题。

配置代理的方法:

1.nginx 

2.vue-cli提供的的proxy(devServer.proxy)

devServer.proxy

proxy配置在vue.config.js中,配置参考 | Vue CLI

配置步骤:

1.添加proxy配置

在配置项中,proxy代表配置要转发的地址(服务器端地址)

2.修改前端项目中请求的地址

向代理服务器地址发送请求

修改配置项后,要重新启动前端项目,才能生效。

配置代理时,使用proxy:value的形式时,value按一个固定的地址字符串配置:

用这种方式配置代理时,代理服务器并不会把所有请求都进行转发,当请求的资源代理服务器本身就有时,就不会进行转发。代理服务器会把前端的public文件夹当做服务器的根目录,当请求的数据是本地具有的数据时,代理服务器并不会对请求进行转发。

如果本地的public文件中有同名文件,在前端进行axios请求时,会直接返回前端public下的资源,所以要注意,不要产生同名问题。

而且用这种方式配置代理时,不能配置多个代理,也无法控制何时进行转发,也就是说,默认是在本地有资源的情况下不会进行转发,没有资源的情况下进行转发,且只能转发到一个固定的服务器。

配置代理时,使用proxy:value,且value是一个配置对象:

在配置对象内部,可以配置多个配置对象,每个配置对象的key是请求前缀,请求前缀是跟在端口号后面的部分(忽略了协议、端口、域名的最前方),当请求前缀匹配上时,才会走当前配置对象配置的代理服务器。value中,target指请求满足当前前缀时,应该转发给的后端服务器。用pathRewrite可以在代理服务器向后端服务器转发时,重写请求的路径。

pathRewrite的value是一个对象,对象中以key:value配置,key是正则表达式形式的匹配,value是把匹配到的内容要替换成什么。

ws用于支持websocket。

changeOrigin用于代理服务器向后端服务器通信时,Host地址是否真实,当changeOrigin为true时,代理服务器会修改请求Host,把Host修改为target,为false时,Host为本地端口。默认为true。如果后端服务器存在限制,可能不允许其他地址访问,设置为true可以避免这些问题。

对于项目中引入的静态css资源,可以在App.vue或者main.js中进行引入。但在通过Import引入在App或者main中时,会对css资源进行严格的检查,如果缺少css中请求的资源,即使没有使用,也会报错。这时可以把css通过link ref引入public的html中。

思考一个简单的搜索功能

思考一种情况,对于一个搜索列表,如果初始进入列表时,显示的是欢迎词,当搜索时,数据未返回时,显示的是加载画面,当数据返回后,显示的是数据列表,当数据请求失败时,显示错误信息。且搜索框和列表是两个组件实现是,两个组件是兄弟关系。通过全局事件总线通信。

如何实现这种效果:

当进行搜索请求时,请求在搜索组件中发送,请求获得的数据通过全局事件总线触发emit传送给列表组件。列表组件中,通过全局事件总线on绑定过事件,获得搜索组件传递的数据。

通过数据辅助:设置是否初始加载的数据(ifFirst)、设置是否显示加载页面(ifLoading)、设置是否显示出错页面(ifError)。这些数据存在列表组件中,但他们的状态是由请求的状态控制的,也需要随全局事件总线一起传输给列表组件。

ifFirst初始默认true,ifLoading和ifError默认false。

当用户和页面交互,想查看搜索结果时,在搜索组件中触发methods,先让ifLoading设置为true,ifFirst为false,并通过$emit把这种修改传递给列表组件,然后搜索组件发送请求,当响应返回时,ifLoading变为false,如果请求成功,通过$emit传递成功的数据,以及辅助数据;如果请求失败,ifError为true,返回数据为空,这些数据也通过$emit传递。

传递数据时 和 接收数据时,出于可读性的考虑,传递的数据可以以对象的形式传送,解构或对象 的形式接收。

vue-resource

vue-resource是一种用于发送ajax请求的vue插件库。

安装:npm i vue-resource

引入:import 接收名(可以随便起) from 'vue-resource'

使用:Vue.use(接收名)

在使用完成后,Vue实例和VueComponent实例上,会多一个$http。

通过this.$http.get/this.$http.post发送请求,其语法和axios是一样的,也是promise风格。

http://www.lryc.cn/news/607026.html

相关文章:

  • Leetcode 10 java
  • Go语言中的盲点:竞态检测和互斥锁的错觉
  • 常见的网络攻击以及预防
  • C++ 构造函数语义学
  • Context API
  • 【AI论文】具备测试时扩散能力的深度研究者
  • win11怎么看本机ip地址?怎么查看代理端口?
  • leetcode 118. 杨辉三角 简单
  • 【C#学习Day14笔记】泛型、集合(数组列表Arraylist、列表list)与字典
  • 基于单片机汽车少儿安全预警系统
  • 118. 杨辉三角
  • 数据结构:在链表中查找(Searching in a Linked List)
  • [ java 网络 ] TPC与UDP协议
  • NTC热敏电阻的原理及应用
  • 8.1 开始新的学习历程
  • 应急响应(windows工具版)
  • Java文件读写I/O操作教程
  • Mysql group by
  • 【C++篇】C++11入门:踏入C++新世界的大门
  • 国内用户如何用手机进行YouTube直播?
  • 『React』 组件通信全攻略
  • 如何从头开始搭建属于自己的家用nas实现内网穿透访问
  • 提升文档管理:推荐一键Docker部署的全文索引搜索引擎工具
  • 如何将联系人从三星手机转移到 iPhone
  • RabbitMQ-镜像队列(Mirrored Queues)
  • 测试平台如何重塑CI/CD流程中的质量协作新范式
  • 什么是CI/CD?
  • 层次聚类:无需“猜”K值,如何让数据自己画出“家族图谱”?
  • HQChart实战教程58:K线主图仿TradingView实现
  • 日志归档存储策略在海外云服务器环境的容量规划方法