第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)

简介: 第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)

image.png

@[toc]

使用vue-cli脚手架去解决跨域问题

6.1问题:回顾前端页面发送ajax请求方式?

答案:
1.xhr newXMLHttpRequest()
2.jQuery $.get $.post jQuery对xhr进行了2次封装
3.axios(推荐使用) 体积小,大约只有jQuery的1/4大小,axios对xhr进行了2次封装
4.fetch 而fetch是跟xhr平级的,所以如果xhr不让用了,那么jQuery和axios就都不能用了,而fetch可以继续使用。fetch有2个致命的问题: 1)对返回数据包2层,获取数据费事; 2)兼容性问题,IE就不能用fetch

# 6.2安装axios
> 命令:npm i axios

# 6.3vue-cli脚手架配置代理服务器

image.png
image.png

## 6.3.1解决跨域问题:配置代理_方式1

> 配置方式

java module.exports = { devServer: { proxy: 'http://localhost:4000' } }
### 案例:开2台模拟服务器,模拟客户端端口8080调用2台服务器端口叫5000和5001,实现ajax解决跨域查询数据
注意点0:模拟启动服务器方式,进入test_proxy_server文件夹 =》 执行cmd =》 执行node server1即可开启端口号为5000的服务器,同理执行node server2即可开启端口号为5001的服务器。

注意点1:配置代理代码写在vue.config.js文件中,且vue.config.js文件新写入代码了,脚手架必须重启后才能生效。

注意点2:axios,get()碰到了跨域问题
image.png

注意点3:

问题:为啥跨域?

答案:跨域指的是违背了同源策略,规定3东西(协议名、主机名、端口号)必须一致。

注意点4:

问题:如果发生跨域,那么请求究竟发没发过去?

答案:请求发过去了,服务器也接收了,服务器还返回了呢,但是你客户端拿不到。

注意点5:

问题:解决跨域问题的方式?

答案:
1.cors 后端返回响应时加几个特殊的响应头即可,前端啥又不用做。但是:一般不会这么用,因为配置了cors后那么任何人都可以向这台服务器获取数据,这是不对的,cors应该只设置某些服务器才对。
2.jsonp 原理:借助script标签里的src属性,在引入外部资源的时候不受同源策略限制的特点办到的。但是缺点: 1)前后端都得写东西,得一起配合 ; 2)它只能解决get请求跨域问题,其他post、put、delete等等都解决不了
3.配置代理服务器(推荐使用) 代理服务器特点:它跟你所处的位置是一样的。比如客户端端口号叫8080,那么配置代理服务器后端口号也叫8080,而不是端口号叫5000,代理服务器类似中介。
image.png

问题2:

问题:代理服务器粉色框8080 -> 蓝色框5000服务器的两条线,是不是还是跨域?端口号对不上?

答案:不影响,因为粉色框和蓝色框都是服务器,服务器和服务器打交道不用ajax(ajax是页面访问服务器的方式),而是使用传统的htpp请求,所以同源策略过呢本管不到“画红圈”的两条线。


注意点6:

问题:如何开启代理服务器?方式有哪些?

答案:1)nginx 2)vue-cli脚手架帮我们开启

注意点7:

问题1:vue-cli如何配置代理服务器?

答案:上官网查找如图,进行配置

java //开启代理服务器 module.exports = { devServer: { proxy: 'http://localhost:5000' } }
image.png

问题2:

问题:开启代理服务器的指定端口,指定8000?还是指定5000?

答案:指定5000,因为8080不用你操心,默认所处位置是8080,那么代理服务器默认端口也是8080,而配置的端口号只是配置一会请求要转发到哪个服务器端口号即可

问题3:

问题:proxy: 'http://localhost:5000'只指定到5000端口号?后面距离接口路径呢?

答案:proxy: ' http://localhost:5000'只指定到5000端口号即可,后面的/student请求路径不能添加上,不要添加具体路径了。

注意点8:

问题:配置完代理服务器,也重新启动脚手架,点击按钮调用接口还是报跨域?

代码如图如下
image.png

答案:你配置完代理服务器了,那么调用接口就不能调5000了,你应该调代理服务器的8080才能接口调通,正确如图如下
image.png

注意点9:代理服务器有2个细节问题说名

> 问题1:代理服务器不是把所有请求都转给5000,当你请求的资源8080本身就有,那么就不会去请求5000。

举例1:访问项目里的public文件夹里的东西,就相当于直接访问8080上面的资源,那么就不会触发服务器端口号为5000的请求响应。

> 问题2:如果请求路径是 http://localhost:8080/student,而我public文件夹下也有个叫student的文件,那么调用接口就不会请求5000服务器了,而是直接把8080的public文件夹下的student内容当作接口返回值返回了。

image.png

注意点10:配置一方式配置的代理服务器只能配置单个的单例服务器。不完美第1点:很局限,无法配置多个代理服务器。不完美第2点:无法去控制调用接口走不走代理服务器,只能说请求的8080没有了,才会把请求转发到代理服务器。

### 完整代码:

> vue.config.js

java module.exports = { pages: { index: { //入口 entry: 'src/main.js', }, }, lintOnSave:false, //关闭语法检查 //开启代理服务器(方式1) devServer: { proxy: 'http://localhost:5000' } }

> main.js

java //引入Vue import Vue from 'vue' //引入App import App from './App.vue' //关闭Vue的生产提示 Vue.config.productionTip = false //创建vm new Vue({ el:'#app', render: h => h(App) })

> App.vue

java <template> <div> <button @click="getStudents">获取学生信息</button> </div> </template> <script> import axios from 'axios' export default { name:'App', methods: { getStudents(){ axios.get('http://localhost:8080/students').then( response => { console.log('请求成功了',response.data) }, error => { console.log('请求失败了',error.message) } ) } } } </script>

> 结果展示:

image.png

## 6.3.2解决跨域问题:配置代理_方式2

> 配置方式

java module.exports = { devServer: { proxy: { '/api': { target: '<url>', ws: true, changeOrigin: true }, '/foo': { target: '<other_url>' } } } }
### 案例:开2台模拟服务器,模拟客户端端口8080调用2台服务器端口叫5000和5001,实现ajax解决跨域查询数据
注意点1:
image.png

注意点2:注意点1的图中’/api’叫前缀,这个前缀就是用来控制代理服务器是否发送请求的,如果请求路径包含特定前缀,那么就会去发送请求到5000服务器

注意点3:

问题:前缀定义了,加到请求路径的哪里?

答案:放在端口的后面,比如:

java axios.get('http://localhost:8080/api/students').then();
注意点4:

问题:proxy中配置前缀’/api’和target标签,调用接口还是报错如图?

image.png

答案:代理服务器配置前缀/atguigu后,粉色框发送请求到蓝色框的路径为/atguigu/students,而实际5000服务器接口叫/students,不叫/atguigu/students,多了个前缀,所以报404找不到,正确办法是发送到5000的请求路径自动把前缀删掉才能调通。

解决方案:添加配置属性pathRewrite:{‘^/atguigu’,’’},寓意为匹配所有以/atguigu开头的字符串自动转换成空字符
image.png

注意点5:

ws属性:用域是否支持websocket

changeOrigin属性:用于控制请求头中的host值是否为真(就是设置是否欺骗5000服务器),如图,举例:粉色框代理服务器到绿色框5000服务器的带红圈的这条线,如果changeOrigin设置true,那么5000服务器获取到请求会问代理服务器你从哪来啊,代理服务器回答我从5000而来;如果changeOrigin设置false,那么5000服务器获取到请求会问代理服务器你从哪来啊,代理服务器会如实回答我从8080而来。默认不写,vue也会配置changeOrigin:true,而React框架中默认不配置,则changeOrigin为false

问题:changeOrigin这属性有啥用?

答案:比如5000服务器做了防火墙拦截,非5000端口过来的请求一律不能进入,这时候就需要设置changeOrigin:true了,这样请求就会欺骗5000从而放行请求通过了,所以正常使用都需要配置changeOrigin:true
image.png

验证changeOrigin属性的不同效果展示:

image.png
image.png
image.png
image.png

完整代码:

vue.config.js

module.exports = {
   
    pages: {
   
        index: {
   
            //入口
            entry: 'src/main.js',
        },
    },
    lintOnSave:false, //关闭语法检查
    //开启代理服务器(方式1)
    // devServer: {
   
    //     proxy: 'http://localhost:5000'
    // },
    //开启代理服务器(方式12)
    devServer: {
   
        proxy: {
   
            '/atguigu': {
   
                target: 'http://localhost:5000',
                pathRewrite:{
   '^/atguigu':''},
                ws: true,
                changeOrigin: true
            },
            '/demo': {
   
                target: 'http://localhost:5001',
                pathRewrite:{
   '^/demo':''},
                ws: true,
                changeOrigin: true
            }
        }
    }
}

main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false

//创建vm
new Vue({
   
    el:'#app',
    render: h => h(App)
})

App.vue

<template>
  <div>
    <button @click="getStudents">获取学生信息</button>
    <button @click="getCars">获取汽车信息</button>
  </div>
</template>

<script>
import axios from 'axios'
export default {
   
  name:'App',
  methods: {
   
    getStudents(){
   
      axios.get('http://localhost:8080/atguigu/students').then(
          response => {
   
            console.log('请求成功了',response.data)
          },
          error => {
   
            console.log('请求失败了',error.message)
          }
      )
    },
    getCars(){
   
      axios.get('http://localhost:8080/demo/cars').then(
          response => {
   
            console.log('请求成功了',response.data)
          },
          error => {
   
            console.log('请求失败了',error.message)
          }
      )
    }
  },
}
</script>

结果展示如图:

image.png

目录
相关文章
|
8天前
|
弹性计算 Windows
阿里云香港服务器收费价格:香港ECS和轻量应用服务器配置介绍
2025年阿里云香港服务器优惠汇总:ECS 2核4G+5M带宽仅199元/年;轻量服务器30M带宽24元/月起,200M峰值带宽25元/月起。轻量性价比高,适合个人及中小企业建站、跨境业务,具体配置价格详见官方活动页。
174 1
|
23天前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
173 18
|
18天前
|
存储 弹性计算 固态存储
阿里云服务器租用价格参考:最新收费标准与不同实例热门配置活动价格
阿里云服务器租用价格参考:配置最低的1核0.5G云服务器,按量付费价格0.063元/小时,按月租用价格为18元/1月,爆款配置的活动价格目前直降,2核2G配置轻量应用服务器抢购价为38元一年;经济型e实例2核2G3M特惠价99元1年;通用算力型u1实例2核4G5M带宽特惠价199元1年;2核8G配置的活动价格最低为一年652.32元;4核16G配置的活动价格最低为1196.64元;8核16G配置的最低一年租用价格为3815.03元。以下是2025年阿里云服务器最新收费标准与热门配置活动价格的详细内容。
|
19天前
|
存储 缓存 数据挖掘
阿里云轻量应用服务器“CPU优化型”配置介绍、费用价格说明
阿里云轻量应用服务器推出CPU优化型,提供更强计算性能,2核4GB起,最高16核64GB,全系支持200Mbps带宽。适用于企业级应用、数据库、游戏服务器等高算力场景,保障稳定高效运行。
164 1
|
15天前
|
弹性计算 定位技术 数据中心
阿里云服务器选择方法:配置、地域及付费模式全解析
2025阿里云服务器选购指南:就近选择地域以降低延迟,企业用户优选2核4G5M带宽u1实例,仅199元/年;个人用户可选2核2G3M带宽ECS,99元/年起。长期稳定业务选包年包月,短期或波动场景用按量付费,轻松搭建网站首选高性价比配置。
|
1月前
|
存储 缓存 数据挖掘
阿里云目前最便宜云服务器介绍:38元、99元、199元性能,选购攻略参考
轻量应用服务器2核2G峰值200M带宽38元1年;云服务器经济型e实例2核2G3M带宽99元1年;云服务器通用算力型u1实例2核4G5M带宽199元1年。对于还未使用过阿里云服务器的用户来说,大家也不免有些疑虑,这些云服务器性能究竟如何?它们适用于哪些场景?能否满足自己的使用需求呢?接下来,本文将为您全方位介绍这几款云服务器,以供您了解及选择参考。
|
2月前
|
网络安全 云计算
如何设置阿里云轻量应用服务器镜像?
本文介绍了在阿里云轻量应用服务器上创建与配置镜像的详细步骤。镜像是一种特殊的文件系统映射,可用于快速克隆服务器配置。内容涵盖准备条件、登录控制台、创建实例、生成镜像、下载与设置镜像,以及如何使用镜像启动新实例。适合希望提升服务器部署效率的用户参考。
|
2月前
|
存储 弹性计算 安全
阿里云轻量服务器通用型、CPU优化型、多公网IP型、国际型、容量型不同实例区别与选择参考
阿里云轻量应用服务器实例类型分为通用型、CPU优化型、多公网IP型、国际型、容量型,不同规格族的适用场景和特点不同,收费标准也不一样。本文为大家介绍轻量应用服务器通用型、多公网IP型、容量型有何区别?以及选择参考。
|
27天前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
116 0
|
16天前
|
开发框架 JavaScript .NET
阿里云轻量应用服务器2核2G38元1年起怎么样?性能、应用场景与购买价值参考
目前在阿里云的活动中,抢购价为38元1年的轻量应用服务器受到了众多个人和中小企业用户的高度关注,该款轻量应用服务器置为2核CPU、2G内存,峰值带宽达200M。那么,此款轻量应用服务器的具体性能如何?适用于哪些应用场景?是否具备较高的购买价值?本文将针对这款特惠轻量应用服务器展开全面且深入的测评与介绍。
276 30
阿里云轻量应用服务器2核2G38元1年起怎么样?性能、应用场景与购买价值参考

热门文章

最新文章