react-app-shell
Version:
react打包脚本和example, 这里的版本请忽略
125 lines (113 loc) • 2.84 kB
text/typescript
import RequestUtils, {
IAnyValueObject,
IRequestConfig,
IRequestGlobalConfig
} from '@mmears/request';
import logHelper from '@mmears/log';
import { localStore } from '@/utils/index';
/**
* 请求配置选项
*/
export interface IRequestConfigV2 extends IRequestConfig {
/**
* 是否携带token
*/
includeToken?: boolean;
}
/**
* 日志对象
*/
const logger = logHelper({
eventName: 'web_log',
showLog: false, // process.env.NODE_ENV === 'development'
getAccount: () => {
return localStore.getUserId() || '';
}
});
/**
* 请求工具 的 配置对象
*/
const config: IRequestGlobalConfig = {
/**
* 接口响应成功的编码, 默认是 'OK'
*/
successCode: 'OK',
/**
* 是否携带cookie
*/
withCredentials: true,
logger,
// trackInOut: true, // 是否跟踪接口的输入输出
perfRule: 'all', // 接口性能 记录日志的规则
/**
* 处理自定义请求头
*/
headersHandle: () => {
const headers = {
'X-USER-TOKEN': localStore.getToken() // 登录会话token
};
// 为了同步 小程序与H5的登录状态, 如果本地有wxToken, 则必须携带
const wechatToken = localStore.getWechatToken();
if (wechatToken) {
// @ts-ignore
headers['X-WECHAT-TOKEN'] = wechatToken;
}
// operateType 大转盘活动的参数, 用来判断 新注册 or 老用户, 很奇怪的东西, 但是已经上线了
const operateType = localStore.get('operateType');
if (operateType) {
// @ts-ignore
headers['operateType'] = operateType;
}
return headers;
}
};
/**
* 请求实例
*/
const request = new RequestUtils(config);
/**
* 转换请求配置 为 标准配置
* @param config
*/
const convertConfig = (config?: IRequestConfigV2): IRequestConfigV2 | undefined => {
// 如果不需要携带token, 则重置 X-USER-TOKEN
if (config && config.includeToken === false) {
config.headers = config.headers || {};
config.headers['X-USER-TOKEN'] = '';
}
return config;
};
/**
* 异步获取或提交数据的方法
* @returns {*}
*/
const fetchUtils = {
/**
* 获取数据
* @param url url
* @param params queryString 参数
* @param config 选项
*/
get(url: string, params?: IAnyValueObject, config?: IRequestConfigV2) {
return request.get(url, params, convertConfig(config));
},
/**
* 提交数据
* @param url
* @param data
* @param config
*/
post(url: string, data?: any, config?: IRequestConfigV2) {
return request.post(url, data, convertConfig(config));
},
/**
* 提交数据
* @param url
* @param data
* @returns {Promise<any>}
*/
postJson(url: string, data?: any, config?: IRequestConfigV2) {
return request.postJson(url, data, convertConfig(config));
}
};
export default fetchUtils;