axios入门使用

Posted 欢先森o

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了axios入门使用相关的知识,希望对你有一定的参考价值。

vue项目中axios的基本使用和简单封装

axios中文文档官网  http://www.axios-js.com/docs/

一:不封装直接使用

  npm install axios

  在main.js里面引用如下

1 import axios from \'axios\'
2 Vue.prototype.$axios = axios;

 

  在自己的组件中然后使用

 

getInfo() {
        let userInfo = {
            name: \'javascript\',
            pass: \'good\'
        };
        let access_token = \'allow_token\';
        this.$axios({
            method: \'post\', // 请求方式
            url: \'/api/user\', // 请求url
            data: userInfo, //传参数据
            headers: {Authorization: access_token} // 携带用户信息token
        }).then(res => {
            console.log(res); // 请求成功之后返回的值,在此处进行数据展示处理
        }).catch(err => {
            console.log(err); // 请求失败返回
        })
}

 

二:简单封装之后进行使用

  npm install axios

我们在src文件夹下面新建apis文件夹。

然后主要需要两个文件,一个是axios.js文件,配置基本选项;一个是helpers.js文件,主要进行请求封装;其他的js文件则是具体使用。如下:

   

  axios.js文件如下

import axios from \'axios\'
import ELEMENT from \'element-ui\';
import router from \'../router\';
// export const root = process.env.API_ROOT;

// 此处我们需要两个axios实例,login请求与其他页面请求稍微有点差别,
// login需要获取到一些用户数据,所以我们单独处理,其他则封装复用即可
// login完成之后,一般获取用户token,此时我们将用户token存到sessionStorage里面即可
const loginInstance = axios.create({
    baseURL: \'\',
    // headers: {\'Content-Type\': \'application/x-www-form-urlencoded\'},
    withCredentials: false
});

const instance = axios.create({
    baseURL: \'\',
    // headers: {\'Content-Type\': \'application/x-www-form-urlencoded\'},
    withCredentials: false
});
let access_token = \'jdshfjdshfjdsf\'; // 假设这个是登录之后获取到的用户token

// 下面的配置是一层拦截,即我们在这个请求发出之前需要做点什么
// 此处是请求发出之前我们需要配置{headers: {Authorization: access_token}}
instance.interceptors.request.use(
    // 成功
    config => {
        if (access_token) {
            // config.headers.Authorization = `Bearer ${access_token}`
            config.headers.Authorization = access_token;
        }
        return config;
    },
    // 失败
    error => {
        return Promise.reject(error);
    }
);

// 在请求完成之后我们需要做点什么,简单就是将后端的response进行返回即可
instance.interceptors.response.use(
    // 请求成功
    response => {
        return response;
    },
    // 请求失败
    error => {
        if (error.response) {
            // 失败则根据其状态码进行对应提示处理
            switch (error.response.status) {
                case 401:
                    sessionStorage.removeItem(\'access_token\');
                    sessionStorage.removeItem(\'userInfo\');
                    router.push(\'/login\');
                    ELEMENT.Message.error(\'身份过期,请重新登录\');
                    break;
                case 404:
                    console.log(\'请求无效\');
                    break;
                case 504:
                    console.log(\'请求超时\');
                    break;
                case 500:
                    console.log(\'请求失败\');
                    break;
                case 420:
                    console.log(\'请求失败\');
                    break;
            }
        }
        return Promise.reject(error);
    });

// 基本封装配置完成,将这两个变量导出即可,方便其他页面使用
export {loginInstance, instance}

helpers.js文件如下(以下常用的login,get,post,del,put,其他暂时不用了解)

import axios from \'axios\';
import {loginInstance, instance} from \'./axios\';

// 定义状态码
const STATUS_OK = 200; // 请求成功
const STATUS_DEL = 204; // del请求成功
const STATUS_CREATE = 201; // 新增成功

export function login(url) {
    return function (data) {
        return loginInstance.post(url, data).then(res => {
            const { status, data } = res;
            if (status === STATUS_OK) {
                return data;
            } else {
                return Promise.reject(res);
            }
        }).catch(err => Promise.reject(err.response));
    };
}

export function get(url) {
    // url为地址  params为请求携带参数  config为可能用到的配置
    // 如在进行将table表格数据导出为excel时,我们需要传递一个config,
    // outputExcel({resCode:this.resCode}, {responseType: \'blob\'})
    // 具体使用后面说明
    return function (params, config) {
        return instance.get(url, {
            ...config,
            params
        }).then(res => {
            const { status, data } = res;
            if (status === STATUS_OK) {
                return data;
            } else {
                return Promise.reject(res);
            }
        }).catch(err => Promise.reject(err.response.data));
    };
}

export function getJson(url) {
    return function () {
        return axios.get(url).then(res => {
            const { status, data } = res;
            if (status === STATUS_OK) {
                return data;
            } else {
                return Promise.reject(res);
            }
        }).catch(err => Promise.reject(err.response.data));
    };
}

export function getAll(...urlList) {
    return function () {
        const getList = urlList.map(url => axios.get(url));
        return axios.all(getList).then(axios.spread((...resList) => {
            return resList.map(res => res.data);
        })).catch(err => Promise.reject(err.response.data));
    };
}

export function post(url) {
    return function (data, config) {
        return instance.post(url, data, config).then(res => {
            const { status, data } = res;
            if (status === STATUS_OK || status === STATUS_CREATE) {
                return data;
            } else {
                return Promise.reject(res);
            }
        }).catch(err => Promise.reject(err.response.data));
    };
}

export function del(url) {
    return function (params, config) {
        return instance.delete(url, {
            ...config,
            params
        }).then(res => {
            const { status } = res;
            if (status === STATUS_DEL || status === STATUS_OK) {
                return;
            } else {
                return Promise.reject(res);
            }
        }).catch(err => Promise.reject(err.response));
    };
}

export function put(url) {
    return function (data, config) {
        return instance.put(url, data, config).then(res => {
            const { status, data } = res;
            if (status === STATUS_OK) {
                return data;
            } else {
                return Promise.reject(res);
            }
        }).catch(err => Promise.reject(err.response.data));
    };
}

export function getBlob(url) {
    return function (params, config) {
        return instance.get(url, {
            params,
            ...config,
            responseType: \'blob\'
        }).then(res => {
            const { status, data } = res;
            if (status === STATUS_OK) {
                const URL = window.URL || window.webkitURL;
                return URL.createObjectURL(data);
            }
        });
    };
}

export function form(url) {
    return function (data, config) {
        return instance.post(url, data, {
            ...config,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded",
            }
        }).then(res => {
            const { status, data } = res;
            if (status === STATUS_OK || status === STATUS_CREATE) {
                return data;
            } else {
                return Promise.reject(res);
            }
        }).catch(err => Promise.reject(err.response.data));
    };
}

 

以上封装已经完成,那么接下来则是具体使用了,使用如下

假设此时我们需要登录,则使用封装好的login

apis文件夹下面新建login.js文件

 

login.js文件

 

// 导入封装的login
import {login} from \'./helpers\'


// 传入url,然后将此userLogin导出,在login.vue文件中使用传如data即可
export const userLogin = login(\'/abc/d/e\');

然后在login.vue文件中发送请求如下:

// 引入userLogin 
import { userLogin } from \'~api/login\'


// 点击提交按钮时发送请求
methods: {
     onSubmit(param) {
          userLogin(param).then(res => 
               {
                    console.log(res)
               }).catch(err => {console.log(err)})
     }          
}

至此,祝大家使用愉快

 

 

 

 

 

 

 

 

以上是关于axios入门使用的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

axios入门笔记

axios入门使用

vue结合axios使用入门

axios 入门使用

axios网络请求基本使用配置使用(全局axios和局部axios实例)模块封装axios拦截器