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)})
}
}
至此,祝大家使用愉快
来源:https://www.cnblogs.com/troublehuan/p/12004147.html