123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // @flow
- /**
- * @name utils/request.js
- * @fileOverview 封装异步请求调用
- * @author liyi
- */
- import axios from 'axios';
- import _ from 'lodash';
- import NProgress from 'nprogress';
- import 'nprogress/nprogress.css';
- //import { updateExpiredTime } from 'utils/authPermit';
- NProgress.configure({
- showSpinner: true,
- easing: 'ease',
- speed: 500,
- });
- /**
- * 检测请求响应状态码,检测请求结果状态,错误时抛出异常
- * @param {*} response
- */
- /* eslint-disable prefer-promise-reject-errors */
- function handleResponse(response) {
- NProgress.done();
- if (response && response.status >= 200 && response.status < 300) {
- const { data: result } = response;
- if (
- (result.code && result.code > 0) ||
- result.success === true ||
- result.code === '1' ||
- typeof result.code === 'string'
- ) {
- const authorization = response.headers.authorization || response.headers.Authorization;
- if (authorization) {
- localStorage.setItem('AI.token', authorization);
- }
- return Promise.resolve({
- code: result.code,
- message: result.message,
- data: _.get(result, 'data', result.value || ''),
- pagination: result.pagination,
- });
- }
- if ((result.code && result.code < 0) || result.success === false) {
- return Promise.reject({
- code: result.code,
- message: result.message,
- error: result.error || result.errors || '',
- });
- }
- return Promise.resolve({
- data: _.get(result, 'data', result.value) || response.data,
- });
- }
- return Promise.reject({
- code: _.get(response || {}, 'status', -1),
- message: _.get(response || {}, 'statusText', '请求异常'),
- error: _.get(response || {}, 'statusText', '请求异常'),
- data: _.get(response, 'result.data', {}),
- });
- }
- /* eslint-disable prefer-promise-reject-errors */
- function handleError(error) {
- NProgress.done();
- const { statusText, status } = error.response || {};
- let errInfo = _.get(error.response || {}, ['data', 'message']) || error.message || '请求服务出错';
- const errCode = _.get(error.response || {}, ['data', 'code']) || error.code || -1;
- // 请求资源不存在
- if (status === 404) errInfo = `请求的资源[${_.get(error.response, ['config', 'url'])}]不存在!`;
- // 请求超时打断
- if (errCode === 'ECONNABORTED') {
- errInfo = '服务连接失败或请求超时!';
- }
- return Promise.reject({
- code: errCode,
- message: errInfo || statusText,
- error: errInfo || statusText,
- data: _.get(error.response, 'data.data', {}),
- });
- }
- /**
- * 创建axios实例,设置默认api请求跟路径、超时时间,请求头content-type
- */
- const axiosInstance = axios.create({
- timeout: 1200000,
- headers: {
- 'Content-Type': 'application/json;charset=UTF-8',
- Accept: 'application/json',
- },
- });
- /**
- * axios 拦截
- * TODO 通过config为每次api请求调用添加token
- */
- axiosInstance.interceptors.request.use(
- function(config) {
- const token = localStorage.getItem('AI.token');
- if (token) {
- //判断token是否存在
- config.headers.Authorization = token; //将token设置成请求头
- }
- if (config.basePath && config.basePath !== '') {
- config.baseURL = 'http://' + config.basePath;
- }
- //updateExpiredTime();
- if (!config.sync) {
- NProgress.start();
- }
- return config;
- },
- function(error) {
- return Promise.reject(error);
- }
- );
- /**
- * axios 拦截
- */
- axiosInstance.interceptors.response.use(response => handleResponse(response), error => handleError(error));
- export default axiosInstance;
|