代码改变世界

axios的二次封装

2017-12-28 16:07  muamaker  阅读(181)  评论(0)    收藏  举报
'use strict'
import axios from 'axios'
import qs from 'qs'

var host = "https://www.easy-mock.com/mock/5bb02bc0a0afc503f502a292/example";

axios.interceptors.request.use(config => {
	// loading
	//请求拦截
	return config
}, error => {
	return Promise.reject(error)
})

axios.interceptors.response.use(response => {
	//响应拦截
	return response
}, error => {
	return Promise.reject(error.response)
})

function checkStatus(response) {
	// loading
	// 如果http状态码正常,则直接返回数据
	if(response && (response.status === 200 || response.status === 304 || response.status === 400)) {
		var res = response.data || {};
		try{
			if(typeof res == "string"){
				res = JSON.parse(res);
			}
			//还可以判断数据是否正确
		}catch(e){
			console.warn("不是一个json数据:",res);
		}
		
		//用于判断数据是否正确
		if(res.success){
			return res;
		}else{
			console.error("数据请求错误");
			return Promise.reject(res);
		}
		
	}else{
		// 异常状态下,把错误信息返回去
		//处理错误情况
		
		return Promise.reject(response)
	}
}

export default {
	post(url, data) {
		data = data || {};
		return axios({
			method: 'post',
			url: host + url,
			data: qs.stringify(data),
			timeout: 10000,
		}).then(checkStatus).catch((e)=>{
			console.error("统一处理的错误",e);
			return Promise.reject(e);
		});
	},
	get(url, params) {
		params = params || {};
		return axios({
			method: 'get',
			url: host + url ,
			params, // get 请求时带的参数
			timeout: 10000,
		}).then(checkStatus).catch((e)=>{
			console.error("统一处理的错误",e);
			return Promise.reject(e);
		});
	}
}

 

import $http from "./http";
$http.get("/demo/secret",param).then((ret)=>{
               console.info(ret);
               return ret;
          });