网站LOGO
L S Y 小窝
页面加载中
12月5日
网站LOGO L S Y 小窝
菜单
  • L S Y 小窝
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    axios的使用
    点击复制本页地址
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    按住ctrl可打开默认菜单

    axios的使用

    yuan · 原创 ·
    编程 · axios
    共 5489 字 · 约 3 分钟 · 314171
    本文最后更新于2020年04月08日,已经过了1336天没有更新,若内容或图片失效,请留言反馈

    学习axios需要熟练使用Promise --> 文章链接

    安装方式

    使用 npm:

    npm install axios

    使用 cdn:


    功能特点

    • 在浏览器中发送XMLHttpRequest请求
    • 在node.js中发送http请求
    • 支持Promise API
    • 拦截请求和响应
    • 转换请求和响应数据

    ......


    axios请求方式

    • axios.request(config)
    • axios.get(url[, config])
    • axios.delete(url[, config])
    • axios.head(url[, config])
    • axios.options(url[, config])
    • axios.post(url[, data[, config]])
    • axios.put(url[, data[, config]])
    • axios.patch(url[, data[, config]])

    因为axios支持Promise API,所以会返回一个Promise对象,请求完成后可以在then()中对数据进行处理


    axios的基本使用

    ■执行get请求

    //默认是get请求
    axios({
        //通过method指定请求方式
        method:'get或post',
        url:'http://www.httpbin.org/headers'
    }).then(res => {
        console.log(res)
    })
    
    
    • 也可以通过axios.get(url[, config])别名来发送get请求
    axios.get({
        url:'http://www.httpbin.org/headers'
    }).then(res => {
        console.log(res)
    })
    
    

    ■get请求的参数拼接

    • 直接在url中拼接
    axios.get('/user?ID=12345')
     .then(res => {
        console.log(res)
    })
     .catch(error=> {
        console.log(error)
    });
    
    
    • 在params中决定要拼接的参数
    axios.get('/user', {
        params: {
          ID: 12345
        }
    })
      .then(res => {
    console.log(res)
    })
      .catch(error=> {
    console.log(error)
    });
    
    

    ■执行post请求

    axios.post('/user', {
        //需要传递的数据
        firstName: 'Fred',
        lastName: 'Flintstone'
    })
    .then(res => {
        console.log(res)
    })
    .catch(error=> {
        console.log(error)
    });
    
    

    axios发送并发请求

    ■使用axios.all()发送并发请求

    axios.all(req1(),req2()).then(results => {})
    axios.all([
        axios({
            url:'http://www.httpbin.org/headers'
        }),
                
        axios({
            url:'http://www.httpbin.org/ip'
        })
    ]).then(results => {
        //results是一个数组,保存了所有的请求结果
        console.log(results)
    })
    

    ■axios返回的结果是一个数组,使用axios.spread可将数组展开

    axios.all([
        axios({
            url:'http://www.httpbin.org/headers'
        }),
                
        axios({
            url:'http://www.httpbin.org/ip'
        })
    ]).then(axios.spread((res1,res2) => {
                console.log(res1);
                console.log(res2);
    }))
    
    

    ■为了让代码更清晰,我们可以将每个请求通过方法分离出来

    function req1(){
        return axios({
            url:'http://www.httpbin.org/headers'
        })
    }
            
    function req1(){
        return axios({
            url:'http://www.httpbin.org/ip'
        })
    }
            
    axios.all([
        req1(),
        req1()    
    ]).then(axios.spread((res1,res2) => {
        console.log(res1);
        console.log(res2);
    }))
    
    

    axios的全局配置

    ■在上面的实列中,我们的BaseURL是固定的

    • 事实上在开发中可能很多参数都是固定的
    • 这时候我们可以进行一些抽取,也可以利用axios的全局配置
    axios.defaults.baseURL = 'http://www.httpbin.org';
    axios.defaults.timeout = 5000;
    
    function req1(){
        return axios({
            url:'/headers'
        })
    }
    
    function req1(){
        return axios({
            url:'/ip'
        })
    }
    
    axios.all([
        req1(),
        req1()    
    ]).then(axios.spread((res1,res2) => {
        console.log(res1);
        console.log(res2);
    }))
    
    

    ■axios的常见配置选项

    请输入图片描述请输入图片描述

    axios实列

    ■为什么要创建axios实列

    • 我们直接使用的axios是默认的实列
    • 当我们给该实列设置一些默认配置时,这些配置就被固定下来了
    • 但在后续开发中,某些配置可能会不一样
    • 比如某些请求需要使用特定的baseURL或timeout等
    • 这时候我们就需要一个新的axios实列

    ■什么时候可以使用axios实列

    • 比如你需要访问多个服务地址,而这些服务请求和响应的结构都完全不同
    • 那么你可以通过axios.create创建不同的实例来处理
    • 这个好处是我可以定制自己的公共配置项,官网也说明,only the url is required,以后所有的请求都可以基于这个配置项
        //创建axios实列
        const instance = axios.create({
            //配置公共选项
            baseURL : 'http://www.httpbin.org',
            timeout : 5000
        })
        
        //使用实列发送网络请求
        instance({
            url:'/headers'
        }).then(res => {
            console.log(res)
        })
        
        instance({
            url:'/ip'
        }).then(res => {
            console.log(res)
        })
    
    

    axios的模块封装

    ■在实际开发过程中,一般会对第三方请求框架进行统一的封装,使其模块化,减小项目对其的依赖,在后续更换和修改框架时易于操作。

    ■这里在vueCli中进行最简单的封装

    ■新建一个新的js文件,导入axios

    //request.js
    import axios from 'axios'
    
    export function request(config){
        const instance = axios.create({
            baseURL : 'http://www.httpbin.org',
            timeout : 5000
        })
    
        return instance(config)
    }
    

    ■使用封装的js文件请求数据

    import {request} from './network/request.js'
    
    request({
        url : '/ip'
    }).then(res => {
        console.log(res)
    })
    
    

    axios拦截器的使用

    ■axios提供了拦截器,用于我们在每次发送请求或得到响应后进行对应的处理
    ■拦截请求

    • instance.interceptors.request.use()

    ■拦截响应

    • instance.interceptors.response.use()

    ■use中需要两个回调函数,请求(响应)成功时执行的函数和请求(响应)失败时执行的函数

    • 请求拦截的回调函数的参数是请求信息,错误信息
    • 响应拦截的回调函数的参数是响应结果,错误信息

    ■创建axios实列

        const instance = axios.create({
            //配置公共选项
            baseURL : 'http://www.httpbin.org',
            timeout : 5000
        })
    

    ■设置拦截器 : 请求拦截

        instance.interceptors.request.use(config => {
            //config : 请求信息
            console.log(config)
    
            //因为拦截器会将请求信息拦截
            //处理完之后要将请求信息return出去
            return config
        },err => {
            console.log(err)
            return Promise.reject(err)
        })
    

    ■设置拦截器 : 响应拦截

        instance.interceptors.response.use(result => {
            //result : 响应结果
            console.log(result)
    
            //因为拦截器会将响应信息拦截
            //处理完之后要将响应信息return出去
            return result
        },err => {
            console.log(err)
            return Promise.reject(err)
        })
    
    

    ■使用实列请求数据

        instance({
            url:'/headers'
        }).then(res => {
            console.log(res)
        })
    
    
    声明:本文由 yuan(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    此页面评论区已关闭
    博客logo L S Y 小窝 51统计 百度统计
    MOEICP 萌ICP备20232210号 ICP 赣ICP备20003060号 又拍云 本站由又拍云提供CDN加速/云存储服务

    🕛

    本站已运行 3 年 270 天 4 小时 50 分

    🌳

    自豪地使用 Typecho 建站,并搭配 MyLife 主题
    L S Y 小窝. © 2020 ~ 2023.
    网站logo

    L S Y 小窝
     
     
     
     
    壁纸