import 'whatwg-fetch'; import { MESSAGE_TYPE} from "./message"; import { DOMIN } from "./constant"; import { userStore } from '../store/userStore'; class Resource { constructor(domain='') { this.domian = domain; } resource({method = 'GET', params, headers, path, queryString = true}) { let query = ''; if(queryString) { query = params ? '?' + Object.keys(params).map(k => k + '=' + params[k]).join('&') : ''; } return new Promise(((resolve, reject) => { fetch(this.domian+path+query, { method, headers: { 'Content-Type': 'application/json', ...userStore.getToken() }, credentials: 'include', body:queryString ? null :JSON.stringify({...params}) // body:JSON.stringify({...params}) }) .then(this.responseHandler(resolve,reject)) .then(this.dataHandler(resolve,reject)) .catch((err) => { this.handleError(err,resolve,reject); }) })) } get = (path,params,headers) => { return this.resource({ path,params,headers }); }; post = (path,params,headers) => { return this.resource({ path,params,headers,method:'POST', queryString:false }); }; delete = (path,params,headers) => { return this.resource({ path,params,headers,method:'DELETE', queryString:false }); }; postForm(url,params) { return new Promise((resolve, reject) => { fetch(this.domian+url,{ method:'post', headers: { ...userStore.getToken() }, body:params }).then(this.responseHandler(resolve,reject)) .then(this.dataHandler(resolve,reject)) .catch((err) => { this.handleError(err,resolve,reject); }); }); } // 处理code非0时的异常问题 dataHandler(resolve,reject) { return (data) => { if(!data.errCode) { resolve(data); }else { this.handleErrorCode(data,resolve,reject); } } } // 处理response数据异常问题 例 400 500 404 responseHandler(resolve,reject) { return (response) => { if (response.status >= 200 && response.status < 300) { return response.json(); } else if(response.status === 405) { userStore.logout(); reject({type:MESSAGE_TYPE.ERROR, msg:'您的登录已失效,请重新登录', status: response.status}); }else { reject({type:MESSAGE_TYPE.ERROR, msg:`服务器异常,错误码:${ response.status }`, status: response.status}); } } } // 处理因网络出现的异常 handleError(err,resolve,reject) { reject({type:MESSAGE_TYPE.ERROR,msg:'网络请求失败'}); } // 后台接口调用成功 抛出提示信息 handleErrorCode({ errCode,errMsg },resolve,reject) { reject({type:MESSAGE_TYPE.ERROR, msg:`${ errMsg }`, status:200, errCode}); } } // export const RESOURCE = new Resource('http://120.27.238.50:8082/DataCenter/api/v1'); export const RESOURCE= new Resource(DOMIN);