异步请求 - Axios

198 阅读2分钟

Axios

项目引入

// 使用npm
npm install axios

// 使用CDN
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

案例

执行GET请求

//执行GET请求
axios.get('/user?id=1234')
.then(res => {
  console.log(res);
})
.catch(err => {
  console.log(err);
});

执行POST请求

// 执行POST请求 | 或者GET请求
axios.post/get('user', {
    params: {
        id: 1234
    }
})
.then(res => {
    console.log(res);
})
.catch(err => {
    console.log(err);
});

并发多个请求

// 执行多个并发请求
function getUserAxiosFuncOne() {
    return Axios.get('/user/1234');
}
function getUserAxiosFuncTwo() {
    return Axios.get('/user/1234/permissions');
}
axios.all([getUserAxiosFuncOne(),getUserAxiosFuncTwo()])
.then(axios.spread((acct,perms) => {
    // 至此,两个请求都已完成
}))

axios API

axios(config)

// 发送POST请求
axios({
    methods: 'post',
    url: 'user/1234',
    data: {
        name: 'elio',
        age: 25
    }
});

// 获取数据资源
axios({
    methods'get',
    url'getData'
}).then(res => {
    console.log(res);
})

创建axios实例

axios.create([config])

const instance = axios.create({
    baseURL: '', // process.env.VUE_APP_API_URL 多数是从项目的env文件中获取
    methods: 'get', // default -> get
    withCredentials: false, // default
        headers: {'Content-Type''application/json'// 自定义请求头
})

配置详解

{
    url : ''// 用于请求的服务器URL
    method'get'// default
    baseURL''// 自动加在url前面
    headers: {}, // 自定义请求头
    params: {}, // 请求携带参数
    timeout1000// 请求超时毫秒数
    // 允许在向服务器发送前,修改请求数据。只能用在put/post/patch
    transformRequest: [(data. headers) => {
        // 对data进行转换处理
        return data
    }],
    // 在传递给then/catch前,允许修改响应数据
    transformResponse: [data => {
        // 对data进行转换和处理
        return data;
    }],
    // 表示跨域请求时是否需要使用凭证
    withCredentialsfalse // default,
    responseType'JSON' // 响应数据的类型
    maxContentLength2000 // 定义允许的响应内容的最大尺寸
    // 定义对于给定的HTTP响应状态码是resolve或reject promise。
    validateStatusfunction(status) {
        return status >=200 & status < 300// default
    }
}

实例方法

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]])

拦截器

// 在请求或响应被then/catch处理前拦截它们
// 添加请求(request)拦截器
axios.interceptors.request.use(
    config => {
        // 发送请求前需要做的事 + 返回config
        return config;
    },
    error => {
        // 对请求错误做的事
        return Promise.reject(error);
    }
);

// 添加响应(response)拦截器
axios.interceptors.response.use(
    res => {
        // 对响应数据做的事 + 返回改造后的响应数据
        return res;
    },
    error => {
        // 对响应错误做的事
        return Promise.reject(error);
    }
);

// 移除拦截器
axios.interceptors.request.eject(拦截器名称)

// 或者创建axios实例,添加拦截器
const instance = axios.create();
instance.interceptors.request.use(() => {});