Vue跨域问题、Vue配置开发环境代理服务、集成Axios发送Ajax请求、集成vue-resource发送Ajax请求

本文主要是介绍Vue跨域问题、Vue配置开发环境代理服务、集成Axios发送Ajax请求、集成vue-resource发送Ajax请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. Ajax请求服务介绍
  • 2. axios的安装
  • 3. Vue跨域问题介绍和解决方案
  • 4. 使用vue-cli配置开发环境代理服务
    • 4.1 简单配置
    • 4.2 复杂配置
    • 4.3 二次封装
  • 5. 集成vue-resource发送Ajax请求

1. Ajax请求服务介绍

  1. xhr: new XHLHttpRequest().open()/send()。偏向底层
  2. JQuery: 对xhr进行了封装。提供$get、$post等API。封装了太多DOM操作,不适合Vue
  3. axios: 基于promise的网络请求库,支持请求拦截器和响应拦截器,体积小,只有JQuery的1/4
  4. fetch: Window.prototype上直接有这个方法,也是基于promise的。但是会将返回的请求包两层promise,需要两次.then才能拿到请求,IE浏览器兼容性差

2. axios的安装

使用命令cnpm install axios安装项目包

3. Vue跨域问题介绍和解决方案

  • Vue使用Axios请求不同端口的服务,会出现类似下面的错误。即CORS跨域问题
Access to XMLHttpRequest at 'http://localhost:5000/students' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • 只要【协议名】【IP】【端口】不同的服务请求就会出现跨域问题
  • 出现跨域问题,服务器能接收到请求,浏览器也能接收到数据,但是浏览器发现存在跨域问题,就对数据进行拦截,Axios出现error报错
  • 解决跨域问题的方法
    1. 服务器可以给Header中配置Access-Control-Allow-Origin,这样浏览器就不会进行数据的拦截,但是安全性不高
    2. jsonp解决跨域问题,借助script标签的src属性,在引入外部资源的时候,不受同源策略限制,需要前后端配置,而且只能解决get请求跨域问题,所以用的少
    3. 配置代理服务器。代理服务器和运行的Vue服务在同一台服务器,而且端口是一样的。虽然代理服务器和返回数据的服务器端口不一样,但是他们之间通信不用前端的Ajax,即不存在跨域问题。代理服务器种类
      1. Nginx
      2. vue-cli

4. 使用vue-cli配置开发环境代理服务

4.1 简单配置

在vue.config.js配置。这种方式只能配置一个接收请求的服务器

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({devServer: {// 接收请求的服务器IP和端口proxy: 'http://localhost:5000'}
})

App.vue:Axios发送请求示例如下:

  • axios发送的请求,是代理服务器的IP和端口
  • 如果发送请求的资源在public目录下存在,如http://localhost:8080/favicon.ico,则不会向服务器发出请求
<template><div><button @click="getStudents">获取学生信息</button></div>
</template><script>import axios from 'axios'export default {name:'App',methods: {getStudents(){// 代理服务器的IP和端口axios.get('http://localhost:8080/students').then(response => {console.log('请求成功了',response.data)},error => {console.log('请求失败了',error.message)})}}}
</script>

4.2 复杂配置

  • 可以配置多个接收请求的服务器。可以配置请求URL访问路径前缀
  • 如果使用vite构建的项目,可以参考vite服务器选项server-proxy

在vue.config.js配置:axios请求的路径是http://localhost:8080/api1/students,最终代理服务器发送的请求url是http://localhost:5000/students

  devServer: {proxy: {// 请求的URL符合前缀才走代理'/api1': {target: 'http://localhost:5000',// 匹配以/api1开头的路径,然后将/api1替换成''pathRewrite:{'^/api1':''},ws: true,    // 用于支持websocketchangeOrigin: true    // 默认是true, 代理服务器告诉请求的服务器,我的端口和你一样是5000。如果是false,则告诉请求的服务器我是代理服务器,我的端口是8080},'/api2': {target: 'http://localhost:5001',pathRewrite:{'^/api2':''},ws: true,changeOrigin: true}}}

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/api1/students').then(response => {console.log('请求成功了',response.data)},error => {console.log('请求失败了',error.message)})},getCars(){axios.get('http://localhost:8080/api2/cars').then(response => {console.log('请求成功了',response.data)},error => {console.log('请求失败了',error.message)})}}}
</script>

4.3 二次封装

  • 目的:

    1. 利用axios请求拦截器功能(一般可以在headers中携带公共的参数,如token)
    2. 利用axios响应拦截器功能(可以简化服务器返回的数据, 和处理http网络错误)
  • 二次封装代码如下:

import axios from 'axios'
import {ElMessage} from 'element-plus'// 创建一个axios实例, 可以设置基础路径、超时时间
const request = axios.create({baseURL: '/api',timeout: 5000
})// 请求拦截器
request.interceptors.request.use((config) => {config.headers.token = 123456return config
})// 响应拦截器
request.interceptors.response.use((response) => {return response.data
}, (error) => {// 处理http网络错误let status = error.response.statusswitch (status) {case 400 | 404:// 错误提示信息ElMessage({type: 'error',message: error.response.message})breakdefault:ElMessage({type: 'error',message: '请求出错了'})}return Promise.reject(new Error(error.message))
})export default request

二次封装的request的使用如下:

import request from "request"request.get('/user').then(res => {console.log(res)
})

5. 集成vue-resource发送Ajax请求

vue-resource也是基于promise的。使用命令cnpm install vue-resource安装vue-resource的项目包

使用示例
App.vue:直接调用VueComponent.$http发送请求

<template><div><button @click="getGithubUsers">获取Github的用户信息</button></div>
</template><script>
export default {name:'App',data() {return {uname:'test'}},methods: {getGithubUsers(){// github服务器给我们解决了跨域问题this.$http.get(`https://api.github.com/search/users?q=${this.uname}`).then(response => {console.log('请求成功了',response.data)},error => {console.log('请求失败了',error.message)})}}
}
</script>

main.js:使用vueResourceEsm插件

import Vue from 'vue'
import App from './App.vue'
import vueResourceEsm from "vue-resource";
Vue.config.productionTip = false// 使用插件
Vue.use(vueResourceEsm)new Vue({el:'#app',render: h => h(App)
})

这篇关于Vue跨域问题、Vue配置开发环境代理服务、集成Axios发送Ajax请求、集成vue-resource发送Ajax请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141781

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of