igroot-fetch
Version:
iGroot 应用 API 层
107 lines (91 loc) • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RESTful = undefined;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _axios = require('axios');
var _axios2 = _interopRequireDefault(_axios);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// 默认 HTTP 错误处理: 状态码不为200 的错误
function handleHttpErrors(response) {
if (response.status && response.status !== 200) {
throw new Error(response);
}
}
// 默认 业务 错误处理: code不为0 的错误
function handleErrors(res) {
if (res.code && res.code !== 0) {
var errText = res.msg || '业务错误!';
throw new Error(errText);
}
}
// 默认 网络 错误处理: 网络错误,正式请求没有发出
function handleNetErrors(err) {
throw new Error('网络错误!');
}
// 请求成功:请求成功后的反馈
function handleSuccess() {}
// 打印调试日志的开关(只有在LocalStorage中把 displayLog 设置为 true 才可以查看日志)
function log() {
var displayLog = JSON.parse(localStorage.getItem('displayLog') || false);
if (displayLog) {
var _console;
(_console = console).log.apply(_console, arguments);
}
}
var defaultOptions = {
Authorization: '',
timeout: 1000,
withCredentials: true, //发送请求时是否携带cookie
needAuth: true, //需要 Authorization认证信息
handleHttpErrors: handleHttpErrors,
handleErrors: handleErrors,
handleNetErrors: handleNetErrors,
handleSuccess: handleSuccess
};
var RESTful = exports.RESTful = function RESTful(url, options) {
var newOptions = _extends({}, defaultOptions, options);
var rest = _axios2.default.create(_extends({
baseURL: url
}, newOptions));
// http request 拦截器
rest.interceptors.request.use(function (config) {
if (newOptions.needAuth) {
if (newOptions.Authorization) {
config.headers.Authorization = newOptions.Authorization;
} else {
var token = JSON.parse(window.localStorage['jwtToken'] || null);
// 判断是否存在token,如果存在的话,则每个http header都加上token
if (token) {
config.headers.Authorization = 'Bearer ' + token;
}
}
}
log(config);
return config;
}, function (err) {
return Promise.reject(err);
});
// http response 拦截器
rest.interceptors.response.use(function (response) {
var res = response.data,
status = response.status;
if (status !== 200) {
newOptions.handleHttpErrors(response);
return Promise.reject(response);
} else {
if (res.code !== 0) {
newOptions.handleErrors(res);
return Promise.reject(res);
} else {
newOptions.handleSuccess();
}
}
return res;
}, function (err) {
newOptions.handleNetErrors(err);
return Promise.reject(err);
});
return rest;
};