内容简介:在写 react-redux-app 脚手架的时候就已经封装好了,一直没记录,后来在使用过程中又参考了
在写 react-redux-app 脚手架的时候就已经封装好了,一直没记录,后来在使用过程中又参考了 antd-design-pro
的报错机制,重新封装了一下,这里记录一下封装的代码,以免遗失
封装
/*
* 功能:封装 axios
* create by tiankai on 05/16/18 17:15:07
*/
import axios from "axios";
import { stringify } from "qs";
import { api } from "src/defaultSettings";
import { Modal } from "antd";
import { getWeekLocalStorage } from "./storage";
const codeMessage = {
200: "服务器成功返回请求的数据。",
201: "新建或修改数据成功。",
202: "一个请求已经进入后台排队(异步任务)。",
204: "删除数据成功。",
400: "发出的请求有错误,服务器没有进行新建或修改数据的操作。",
401: "用户没有权限(令牌、用户名、密码错误)。",
403: "用户得到授权,但是访问是被禁止的。",
404: "发出的请求针对的是不存在的记录,服务器没有进行操作。",
406: "请求的格式不可得。",
410: "请求的资源被永久删除,且不会再得到的。",
422: "当创建一个对象时,发生一个验证错误。",
500: "服务器发生错误,请检查服务器。",
502: "网关错误。",
503: "服务不可用,服务器暂时过载或维护。",
504: "网关超时。"
};
function checkStatus(response) {
if (!response) {
throw new Error("response is undefined");
}
if (response.status >= 200 && response.status < 300) {
return response;
}
const errorText = codeMessage[response.status] || response.statusText;
const error = new Error(errorText);
error.name = response.status;
error.response = response;
error.text = errorText;
throw error;
}
export const config = {
//`baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
baseURL: api,
// 在请求发送前,可以根据实际要求,是否要对请求的数据进行转换
// 仅应用于 post、put、patch 请求
transformRequest: [
function(data, headers) {
// Do whatever you want to transform the data
// console.log(headers);
return stringify(data);
}
],
// `transformResponse` 在传递给 then/catch 前,允许修改响应数据
// it is passed to then/catch
transformResponse: [
function(data) {
// Do whatever you want to transform the data
return data;
}
],
// 请求头信息
headers: {
// 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8;',
},
// 设置超时时间
timeout: 1000,
// 携带凭证
withCredentials: false
};
const instance = axios.create(config);
//请求拦截器
instance.interceptors.request.use(
config => {
// Do something before request is sent
// 可以在这里做一些事情在请求发送前
// config.headers['TOKEN']=''// 在这里设置请求头与携带token信息;
const token = getWeekLocalStorage("token");
if (token) {
config.headers["AUTHORIZATION"] = token;
}
if (config.method === "post") {
config.headers["Content-Type"] =
"application/x-www-form-urlencoded;charset=UTF-8";
}
return config;
},
error => {
// Do something whit request error
// 请求失败可以做一些事情
return Promise.reject(error);
}
);
//响应拦截器
instance.interceptors.response.use(
response => {
// Do something with response data
// 在这里你可以判断后台返回数据携带的请求码
return response;
},
error => {
// Do something whit response error
// 根据 错误码返回信息
return checkStatus(error.response);
}
);
/* method GET/POST/PUT
* url
* params/data
* headers { 'content-type': 'application/x-www-form-urlencoded'}
*/
const ajax = options => {
return new Promise((resolve, reject) => {
instance(options)
.then(response => {
resolve(response);
})
.catch(error => {
console.dir(error);
Modal.error({
title: "请求错误",
content: error.message
});
reject(error);
});
});
};
export default ajax;
使用
import ajax from "src/utils/axios";
//获取客户营销报表
export function fetchClientMarket(payload) {
return ajax({
method: "GET",
url: `/report/clientMarket/clientMarketStatistics?${payload}`
});
}
// /report/login 平台登录接口
export function login(payload) {
return ajax({
method: "POST",
url: "/report/login",
data: payload
});
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Angular6笔记之封装http
- golang分布式存储 读书笔记(2)——流操作之PutStream封装
- 封装JDBC—非框架开发必备的封装类
- SpringBlade 2.3.2 发布,增加 OSS 封装及单元测试封装
- SpringBlade 2.3.2 发布,增加 OSS 封装及单元测试封装
- docker 封装 alinode
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
区块链革命
[加]唐塔普斯科特(Don Tapscott)、[加]亚力克斯·塔普斯科特(Alex Tapscott) / 中信出版集团股份有限公司 / 2016-9 / 69
(1)国际大腕“数字经济之父”继畅销书《维基经济学》之后再出力作! (2)一本真正全景式描述区块链理论及应用的巨著! (3)苹果共同创始人史蒂夫·沃兹尼亚克、世界经济论坛创始人和论坛主席克劳斯·施瓦布、网景及硅谷安德森·霍洛维茨风险投资公司创始人马克·安德森、麦肯锡董事长兼全球总裁鲍达民、 百事公司首席执行官卢英德、丹·舒尔曼 Paypal公司首席执行官等全球政治界、学术界和商界精英联......一起来看看 《区块链革命》 这本书的介绍吧!