个人技术总结——Axios的使用

前端不许死 前端不许死 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

Axios

目录

  • Axios
  • 1.技术概述
  • 2.技术详述
  • 2.1安装方式
  • 2.2Axios的请求方法
  • 2.2.1get请求
  • 2.2.2post请求
  • 2.2.3put请求
  • 2.2.4patch请求
  • 2.2.5delete请求
  • 2.2.6并发请求
  • 2.3Axios实例
  • 2.3.1axios全局配置
  • 2.3.2axios实例配置
  • 2.3.3直接在axios请求上配置
  • 2.4拦截器
  • 2.4.1请求拦截器
  • 2.4.2响应拦截器
  • 2.4.3移除拦截器
  • 2.4.4错误请求
  • 2.4.5取消请求
  • 2.5学习后实践——request封装
  • 3.总结

1.技术概述

axios全称:(ajax-I/O-system)是基于promise用于浏览器和node.js的http客户端,因此可以使用Promise API

ajax是异步网络请求,可以使页面无刷新请求数据,还可以防止CSRF(跨域请求伪造)。
实现ajax的方式有①jQuery封装ajax好用,但是没必要因为ajax引入jQuery框架②原生的XML HttpRequests的配置和调用方式都很繁琐,实现异步请求十分麻烦
所以选择学习使用axios。

2.技术详述

2.1安装方式

npm install axios

在vue项目中的main.js中引入axios

import axios from 'axios'
Vue.prototype.$axios = axios

在组件中使用axios

<script>
    export default {
        mounted(){
            //直接使用方法
            this.$axios.get('url').then(res=>{
                //打印返回的数据
                console.log(res);
            })
        }
    }
</script>

2.2Axios的请求方法

2.2.1get请求

//请求格式类似于 http://localhost:8080/goods.json?id=1
//方法一:
//axios上有get this.$axios.get( 'url',{ params:{} } ).then(res=>{},err=>{})
this.$axios.get('url',{
    params:{id: 1},
}).then(res=>{
    console.log(res)
},err=>{
    console.log(err)
})
//方法二:将请求类型写入
this.$axios({
    method:'get',
    url:'url',
    params:{
        id:1
    }
}).then(res=>{
    console.log(res)
},err=>{
    console.log(err)
})
// 获取远端图片
this.$axios({
  method:'get',
  url:'http://bit.ly/2mTM3nY',
  responseType:'stream'
}).then(res=> {
    //对文件流进行写入
  res.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
});

2.2.2post请求

  • form-data表单提交,图片上传,文件上传时用到该类型比较多
  • application/json 一般用于ajax异步请求
//方法一 
this.$axios.post('url',{
    id:1
}).then(res=>{
    console.log(res)
},err=>{
    console.log(err)
})
this.$axios({
    method:'post',
    url:'url',
    data:{
        id:1
    }
}).then(res=>{
    console.log(res)
},err=>{
    console.log(err)
})

form-data请求

//写入要请求的参数
let data = {}
//使用FormData创建formdata实例
let formdata = new FormData()
for (let key in data){
    //append为formdata添加属性
    formdata.append(key,data[key])
}
this.$axios.post('/url',formdata).then(res=>{
    console.log(res)
},err=>{
    console.log(err)
})

2.2.3put请求

this.$axios.put('url',{
    id:1
}).then(res=>{
    console.log(res.data)
})

2.2.4patch请求

this.$axios.patch('url',{
    id:1
}).then(res=>{
    console.log(res)
})

2.2.5delete请求

this.$axios.delete('url',{
    params:{
        //比如要删除指定id的内容,也需要传递参数
        id:1
    }
}).then(res=>{
    //删除成功会返回
    console.log(res)
})

2.2.6并发请求

同时发送多个请求,并在then时统一处理res值 ,将请求写成数组形式进行请求

this.$axios.all([
    //以数组形式请求
    this.$axios.get('/url1',data1),
    this.$axios.get('/url2',data2)
]).then(
    //使用this.$axios.spread展开res
    this.$axios.spread((res1,res2)=>{
        console.log(res1)
        console.log(res2)
    })
)

2.3Axios实例

使用this.$axios.create创建axios实例对象

axios实例的常见配置

  • baseURL:string写入请求的域名。
  • timeout:以Number形式写入请求超时的时长,单位为ms,超过该时长则判断为超时
  • url:请求路径
  • method:请求方法
  • headers:请求头。为Object对象。具体在http中进行学习
  • params:请求参数,将参数拼接在url上面,类型为object,是明文请求
  • data:请求参数,将参数放入请求体当中,类型为object,不是明文请求
let Axiosinstance = this.$axios.create({
                baseURL: 'http://localhost:9090',
                timeout: 2000
            })
//Axiosinstance现在为axios实例对象了,可以调用axios上的方法        
Axiosinstance.get('url').then(res=>{
    console.log(res);
})

2.3.1axios全局配置

this.$axios.defaults.配置

//配置全局的超时时长
this.$axios.defaults.timeout = 2000;
//配置全局的基本URL
this.$axios.defaults.baseURL = 'http://localhost:8080';

2.3.2axios实例配置

首先创建一个实例this.$axios.create(),在实例身上加配置

let AxiosInstance = this.$axios.create();
AxiosInstance.defaults.timeout =3000

2.3.3直接在axios请求上配置

直接在axios请求上配置,采用key:value形式即可

this.$axios.get('url',{
                timeout: 3000
                params:{}
            }).then()

若在多次对同一配置进行了多次设置,则遵循优先级:请求配置 > 实例配置 >全局配置

2.4拦截器

拦截器:在请求或响应被处理前拦截它们

2.4.1请求拦截器

interceptor意思为拦截器

this.$axios.interceptors.request.use

this.$axios.interceptors.request.use(config=>{
    //请求前进行处理
    return config
},err=>{
    //请求错误处理
    return Promise.reject(err)
})
//直接在axios实例上创建拦截器
let Axiosinstance = $axios.create();
Axiosinstance.interceptors.request.use(config=>{
    return config
},function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  })

2.4.2响应拦截器

this.$axios.interceptors.response.use(res=>{
                //请求成功对响应数据做处理

                return res //该返回对象会传到请求方法的响应对象中
            },err=>{
                // 响应错误处理

                return Promise.reject(err);
            })

2.4.3移除拦截器

eject

let myInterceptor = this.$axios.interceptors.request.use(config=>{return config});
//取消拦截
this.$axios.interceptors.request.eject(myInterceptor);
let instance = this.$axios.interceptors.request.use(config=>{
                config.headers = {
                    token: ''
                }
                return config
            })
            
//取消拦截
this.$axios.interceptors.request.eject(instance);

2.4.4错误请求

this.$axios.get('/url').then(res={

            }).catch(err=>{
                //请求拦截器和响应拦截器抛出错误时,返回的err对象会传给当前函数的err对象
                console.log(err);
            })

2.4.5取消请求

let source = this.$axios.CancelToken.source();

this.$axios.get('url',{
                cancelToken: source
            }).then(res=>{
                console.log(res)
            }).catch(err=>{
                //取消请求后会执行该方法
                console.log(err)
            })

//取消请求,参数可选,该参数信息会发送到请求的catch中
source.cancel('取消后的信息');

2.5学习后实践——request封装

在学习了axios的相关知识之后,进行了request的封装,方便请求。


```javascript
import axios from "axios";
// 创建axios,赋给变量service
const request = axios.create({
  baseURL:  'http://49.233.xx/admin',//后端地址
    timeout: 15000,   // 超时
});

//添加请求拦截器
request.interceptors.request.use(
    function (config) {
        config.headers['Access-Control-Allow-Origin'] = '*';
        //在发送请求之前做一些事情
        return config;
    },
    function (error) {
        //队请求错误做些什么
        return Promise.reject(error);
    }
);
//添加响应拦截器
request.interceptors.response.use(
    function (response) {
        //使用响应数据返回响应;
        const data = response;
        // 如果data.code
        if (data) {
            return Promise.resolve(data.data);
        }
        return response;
    },
    function (error) {
        //使用响应错误返回
        return Promise.reject(error);
    }
);
// 将service 导出
export default request;


处理跨域问题也是非常重要的一部分

img

之后可以新建文件夹,按照封装好的格式封装api,非常的方便。

img

3.总结

学习 Axios 对于前端开发来说非常重要,Axios提供了一个简单、强大且跨平台的方式来处理 HTTP 请求和响应,简化了数据的发送与接收,并且支持高级功能如拦截器、请求取消等,有助于提高开发效率和应用性能。对Axios的学习理解还需要进一步应用,以更加熟悉 Axios的使用。

...全文

相关推荐

Vue cli3和flask搭建的个人博客项目,前后端分离,使用axios进行前后端通信,运用vuex、element-ui技术

基于Vue cli3和flask搭建的个人博客项目,前后端分离,使用axios进行前后端的通信,还运用了vuex、element-ui等,主要实现了登录注册、首页博客展示、添加博客、个人博客、我的收藏、评论博客等模块。非常适合python web开发全栈开发学习的练手项目。 Vue+Flask+mysql打造前后端分离的个人博客 基于Vue cli3和flask搭建的个人博客项目,前后端分离,使用axios进行前后端的通信,还运用了vuex、element-ui等,主要实现了登录注册、首页博客展示、添加博客、个人博客、我的收藏、添加评论、删除博客等模块,是一个小型项目 功能: ①用户管理,登录注册,前端传输时对密码的md5加密 ②首页博客展示,时钟展示 ③添加博客 ④添加博客评论(新增用户头像、图片的懒加载、节流与防抖) ⑤收藏博客 ⑥进入个人中心页面,查看个人发表的博客以及收藏的博客,对这些博客进行编辑删除处理等 前端代码在src文件夹下 后端代码在flask文件夹下,使用蓝图进行管理 数据库是mysql

白话机器学习

luisa.dev:[WIP]极简个人网站

个人网站 极简主义的个人网站。 堆 React 具有样式化组件CSS-in-JS 使用react-router-dom的声明式路由 HTTP请求和REST API与axios一起使用

清净平常心

Axios使用指南[源码]

本文详细介绍了Axios的基本用法,包括如何导入Axios、发送GET和POST请求以及处理响应。Axios是一个基于Promise的HTTP客户端,适用于浏览器和Node.js环境。文章首先介绍了如何通过在线地址导入Axios,然后详细讲解了GET请求的两种参数传递方式:直接在URL中传递查询参数和通过params配置对象传递。接着,文章介绍了POST请求的发送方法,包括如何构造请求数据和目标URL。最后,文章详细说明了如何处理响应,包括成功响应的处理和错误响应的不同情况。通过本文,读者可以快速掌握Axios的基本使用方法,为前端开发中的数据交互提供便利。

404Lover

personal_site:回购我的个人网站

个人网站 技术: 使用VUE.js构建。 使用Axios调用Medium。 居住

司幽幽

fetch与axios练习[项目源码]

本文通过实际代码示例展示了如何使用fetch和axios进行数据请求和处理。内容涵盖了使用axios和fetch分别进行GET和POST请求的实现,包括数据获取、列表展示、加载状态管理以及错误处理。示例中,axios用于获取新闻列表数据并展示,fetch用于获取相册列表数据并展示,同时还演示了如何使用这两种方法提交表单数据。文章提供了完整的HTML和JavaScript代码,适合初学者学习和练习fetch和axios的基本用法。

xxx12
评论
收藏 已收藏
分享
返回顶部