在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json等。所以我们在vue项目中请求后台获取数据一般都是用axios,但是直接操作axios会比较繁琐,所有一般会封装好axios使用。那么该如何使用封装好axios呢?
- 首先,在vue项目中使用以下命令来安装axios。
npm install axios
- 一般我会在项目的src目录中,新建一个utils文件夹,然后在里面新建一个api.js文件。http.js文件用来封装我们的axios,api.js用来统一管理我们的接口。
- 在api.js中封装axios,一般会封装get,post,put,delete和上传文件几种提交方式:
首先,在api.js文件中用import axios from 'axios’引用axios,我们的项目环境可能有开发环境、测试环境和生产环境。我们通过node的环境变量来匹配我们的默认的接口url前缀。声明一个常量的base前缀可以设置axios的默认请求地址,代码如下:
Get请求:
import axios from 'axios'
let base= '/api';
export const getRequest = (url,params) => {
return axios({
method: 'get',
data:params,
transformRequest: [function (data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
url: `${base}${url}`
});
}
Post请求:
export const postRequest = (url, params) => {
return axios({
method: 'post',
url: `${base}${url}`,
data: params,
transformRequest: [function (data) {
// Do whatever you want to transform the data
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
}
Put请求:
export const putRequest = (url, params) => {
return axios({
method: 'put',
url: `${base}${url}`,
data: params,
transformRequest: [function (data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
}
Delete请求:
export const deleteRequest = (url) => {
return axios({
method: 'delete',
url: `${base}${url}`
});
}
上传文件请求:
export const uploadFileRequest = (url, params) => {
return axios({
method: 'post',
url: `${base}${url}`,
data: params,
headers: {
'Content-Type': 'multipart/form-data'
}
});
}