繁琐的http请求多而复杂,这里就将axios的get和post进行封装,以方便后续在项目中方便的使用。
首先创建一个名为http.js的js然后下面就是http.js中的代码:
axios/http.js
import axios from 'axios'
import qs from 'qs'
let localhosts = '这里是要请求的url';
axios.interceptors.request.use(config => {
// loading
return config
}, error => {
return Promise.reject(error)
});
axios.interceptors.response.use(response => {
return response
}, error => {
return Promise.resolve(error.response)
});
function checkStatus(response) {
// loading
// 如果http状态码正常,则直接返回数据
if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
return response
// 如果不需要除了data之外的数据,可以直接 return response.data
}
// 异常状态下,把错误信息返回去
return {
status: 404,
msg: '网络异常'
}
}
function checkCode(res) {
// 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户
if (res.status === 404) {
// alert(res.msg)
}
if (res.data && (!res.data.success)) {
// alert(res.data.error_msg)
}
return res
}
export default {
post (url, data) {
return axios({
method: 'post',
baseURL: localhosts,
// https://cnodejs.org/api/v1
url,
data: qs.stringify(data),
timeout: 10000,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).then(
(response) => {
return checkStatus(response)
}
).then(
(res) => {
return checkCode(res)
}
)
},
get (url, params) {
return axios({
method: 'get',
baseURL: localhosts,
url,
params, // get 请求时带的参数
timeout: 10000,
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
}).then(
(response) => {
return checkStatus(response)
}
).then(
(res) => {
return checkCode(res)
}
)
}
}
写到这里http.js的内容也算是结束了。
下面还有就是api的一个封装了:
axios/api.js
export default {
right: '/dev/reverse', // 正确路径/topic/5433d5e4e737cbe96dcef312
container:'/dev/history',
error: '/topc/5433d5e4e737cbe96dcef312', // url错误
backEnd: '/topic/5433d5e4e737cbe96dcef31' // 参数错误
}
这两个js写完一定要进行全局的配置,或者说到时那个组件需要就给他单独的引用也是可以的,我是直接将这个配置到全局里面去了为了方便下面是在main.js中的引入代码:
main.js
import http from './axios/http'
import api from './axios/api'
Vue.prototype.http = http;
Vue.prototype.api = api;
下面的就是在项目中的引用了这玩意主要就是配合vue来进行开发的所以我就只上获取数据的代码了:
methods: {
//获取接口
fetchDatas: async function (currentIndex, pageName) {
let params = {
index: currentIndex,
pagesize: pageName,
};
const res = await this.http.get(this.api.container, params);//获取成功
if (res.status == 200) {
this.getpage = res.data.data;
this.pagedata = this.getpage.records;
this.total = this.getpage.total;//拿到总条数
} else {
const dataError = await this.http.get(this.api.error, params);//获取失败
if (dataError.status != 200) {
console.info(dataError);
}
}
},
mounted() {
this.fetchDatas();
}
加油!!!
网友评论