axios的使用

axios的使用

安装

npm install axios --save

导入
在main.js中导入

import axios from 'axios'

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用axios

//使用axios
    //axios自带promise,故可以用then
axios({
    url: 'http://123.207.32.32:8000/home/multidata',
    //默认情况下,也就是不写methods,就是get请求
    method: 'get'
}).then(
    res => {
        console.log(res);
    }
)
//虽然这个接口写在了下面,但是返回时,不知道谁先返回
axios({
    url: 'http://123.207.32.32:8000/home/data?type=sell&page=3'
}).then(
    res => {
        console.log(res);
    }
)
//上面的接口也可以这样写
axios({
    url: 'http://123.207.32.32:8000/home/data',
    //这写的是url的参数,专门针对get请求的参数拼接
    params: {
        type: 'pop',
        page: 3
    }
}).then(
    res => {
        console.log(res);
    }
)

在这里插入图片描述

axios发送并发请求

axios.all([axios(),axios()]).then()
//axios发送并发请求
axios.all([axios({
    url: 'http://123.207.32.32:8000/home/multidata',

}), axios({
    url: 'http://123.207.32.32:8000/home/data',
    params: {
        type: 'sell',
        page: 5
    }
})]).then(results => {
    console.log(results);
})

在这里插入图片描述

axios发送并发请求,分开展示

axios.all([axios({
    url: 'http://123.207.32.32:8000/home/multidata',

}), axios({
    url: 'http://123.207.32.32:8000/home/data',
    params: {
        type: 'sell',
        page: 5
    }
})]).then(axios.spread((res1, res2) => {
    console.log(res1);
    console.log(res2);
}))

在这里插入图片描述

全局配置

有些属性是一样的,我们可以进行公共处理

//全局配置

axios.defaults.baseURL = 'http://123.207.32.32:8000',
    axios.defaults.timeout = 5000
//全局配置

axios.defaults.baseURL = 'http://123.207.32.32:8000',
    axios.defaults.timeout = 5000

axios.all([axios({
    url: '/home/multidata',

}), axios({
    url: '/home/data',
    params: {
        type: 'sell',
        page: 5
    }
})]).then(axios.spread((res1, res2) => {
    console.log(res1);
    console.log(res2);
}))

常见的配置属性
params只针对get请求,对get请求进行拼接。
如果为post请求,相应的参数应该写在请求体里面的data中。
在这里插入图片描述

创建对应的axios的实例

对于全局创建组件,有些全局属性可能不一样,比如url,这时,全局属性就不是很好用了。

//对于不同参数的,进行创建不同实例
//创建对应的axios的实例
const instance1 = axios.create({
    baseURl: 'http://123.207.32.32:8000',
    timeout: 5000

})

//使用axios实例
instance1({
    url: '/home/multidata'
}).then(res => {
    console.log(res);
})

//另一个应用实例
instance1({
        url: '/home/data',
        params: {
            type: 'pop',
            page: 1
        }
    }).then(res => {
        console.log(res);
    })
    //第二个实例
const instance2 = axios.create({
    //这个url是和上面实例不同的,但是目前还没有别的接口。
    baseURl: 'http://123.207.32.32:8000',
    timeout: 10000,
    //headers:{}

})

axios模块的封装

我们必须有对第三方框架经行封装的习惯,免得第三方框架不跟新,更改费劲。
在这里插入图片描述好好补补回调的知识。

import axios from 'axios'
//第一种
//这里的参数success和failure是回调用的,这部分知识很薄弱,多补补。
export function request(config, success, failure) {
    //1.创建axios对象
    const instance = axios.create({
            baseURL: 'http://123.207.32.32:8000',
            timeout: 5000
        })
        //发送真正的网络请求
        //别人给我们传入一个config,我们就要把config给instace传进去
    instance(config).then(res => {
        //这里已经回调了,所以没必要打印
        //console.log(res);
        success(res)
    }).catch(err => {
        // console.log(err);
        failure(err)
    })
}



封装好的文件的使用

//封装的网络请求的使用
//引入封装好的文件
import { request } from './network/request'

//第一种,要对应好
request({
    url: '/home/multidata'
}, res => {
    console.log(res);
}, err => {
    console.log(err);
})

第二种使用方法

//第二种
export function request(config) {
    //创建axios实例
    const instance3 = axios.create({
            baseURL: 'http://123.207.32.32:8000',
            timeout: 5000
        })
        //发送真正的网络请求
    insatace4(config.baseConfig).then(res => {
        config.success(res);
    }).catch(err => {
        config.failure(err)
    })
}
//第二种
request({
    baseConfig: {

    },
    success: function(res) {

    },
    failure: function(err) {

    }
})

axios的第三版原理写法
request.js

//最终的封装方法
 export function request(config) {
     return new Promise((resolve, reject) => {
         //1.创建axios的实例
         const instance = axios.create({
                 baseURL: 'http://123.207.32.32:8000',
                 timeout: 5000
             })
             //2.发送真正的网络请求
         instance(config).then(res => {
             resolve(res)
         }).catch(err => {
             reject(err)
         })
     })
 }

在需要网络请求的文件中

//最终的请求方式的使用
request({
    url: '/home/multidata'
}).then(res => {
    console.log(res);
}).catch(err => {
    console.log(err);
})

此时,我们根据源码知道,上面的封装还是比较多余。
最终简洁版

import axios from 'axios'
//最终方式的简化,因为源码就是返回的promise,故可以不用promise
export function request(config) {
    //1.创建axios的实例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000
    })


    //2.发送真正的网络请求
    return instance(config)
}

如果哪天我们的框架不维护了,我们只需改我们的引入。但是在发送真正的网络请求那,就必须通过promise进行封装了。我们不用promise封装,是因为vue给我们封装好了。

axios拦截器

什么时候会用到拦截器
1.比如config中的一些信息不符合服务器要求。
2.比如每次发送网络请求时,都希望在界面上显示一个请求图标。
2.某些网络请求(比如登录(token)),必须携带一些特殊信息。
在这里插入图片描述
1.全局拦截axios.interctptors
2.instance为发送请求的对象

//拦截请求
    instance.interceptors.request;
    //拦截响应
    instance.interceptors.response;

拦截器的使用

instance.interceptors.request.use(config => {
        console.log(config);
        return config
    }, err => {
        console.log(err);
    })

注意
如果不写 return config,则不会打印请求结果。会打印错误类型
在这里插入图片描述

// 2.2拦截响应
    instance.interceptors.response.use(res => {
        console.log(res.data);
        return res.data
    }, err => {
        console.log(err);
    })

注意
1.如果不返回响应结果,前面用到响应数据的地方,会报undefined
在这里插入图片描述

anxios完整的使用流程

request.js

//引入框架
import axios from 'axios'

export function request(config) {
    //1.创建axios的实例
    const instance = axios.create({
            baseURL: 'http://123.207.32.32:8000',
            timeout: 5000
        })
        //2.axios的拦截器
        //   2.1拦截请求
       instance.interceptors.request.use(config => {
            console.log(config);
            return config
        }, err => {
            console.log(err);
        })
        // 2.2拦截响应
    instance.interceptors.response.use(res => {
        console.log(res.data);
        return res.data
    }, err => {
        console.log(err);
    })


    //3.发送真正的网络请求
    return instance(config)
}

使用request的文件

//引入封装好的文件
import { request } from './network/request'

//最终的请求方式的使用
request({
    url: '/home/multidata'
}).then(res => {
    console.log(res);
}).catch(err => {
    console.log(err);
})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值