fetch-api.js 3.18 KB
let config = require('./../config');
let Store = require('./../utils/stroage');
const reason = '服务异常,请稍后重试';

// 检查并获取sessionid  sid:是否需要验证sessionId
function checkSessionId(sid) {
	return new Promise((resolve, reject) => {
		if (!sid) {
			resolve();
			return;
		}
		let sessionId = Store.getItem('sessionId');
		if (sessionId) {
			resolve(sessionId);
		} else {
			// 身份失效
			//登陆失效的回调
			// Store.clear("sessionId");
			// wx.reLaunch({
			// 	// url: '/pages/authorize/authorize'
			// 	url: '/pages/login/login',
			// })
		}
	});
}

const fetch = function ({
	loading = false,
	toast = true,
	sid = true,
	mode,
	isMock,
	url,
	data,
	method
}) {
	// 自定义参数
	// const clientInfo = {
	// 	user_id: 1
	// }
	// 日志埋点不需要出现loading
	if (loading && mode != 'log') wx.showLoading();
	// if (loading && mode != 'log') Util.showLoading();

	// 新建promise对象
	let promise = new Promise((resolve, reject) => {
		/**
		 * isMock设置单个接口Mock开启
		 * mode:目前针对不同业务的接口进行处理,log标识本地埋点上传
		 */
		let baseUrl = config.NET_CONFIG.baseApi;
		if (isMock && mode != 'log') {
			baseUrl = config.MOCKAPI; //环境配置
		}

		checkSessionId().then((result) => {
			if (sid) {
				url += "?sessionId=" + Store.getItem("sessionId")
			}
			// console.log("url:", url);
			wx.request({
				url: baseUrl + url, //请求地址
				data: data, //自定义参数
				method: method || 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
				// header: {}, // 设置请求的 header的默认参数,根据项目需求添加
				// header: {
				// 	'clientInfo': JSON.stringify(clientInfo),
				// 	'Server-Token':'xxx'
				// },
				success: function (result) {
					// 日志上传不需要处理结果
					if (mode == 'log') return;
					let res = result.data;
					// 登陆失效拦截,根据项目需要添加自己的配置
					if (res.code == 404) {
						// wx.showToast({
						// 	title: '当前登陆失效,请重新登陆',
						// 	icon: 'none',
						// 	mask: true,
						// 	success: () => {
						// 		return;
						// 	}
						// })
						//登陆失效的回调
						Store.clear("sessionId");
						wx.reLaunch({
							url: '/pages/authorize/authorize'
						})
					}
					// 内部统一的成功code拦截码
					if (res.code === 200) {
						if (loading) {
							wx.hideLoading();
						}
						// resolve(res);
						// 直接返回content
						resolve(res.content);
					} else {
						// 有些特殊状况不需要toast 需要弹窗
						if (toast) {
							wx.showToast({
								title: res.errMsg || errMsg,
								icon: 'none'
							})
						} else {
							wx.hideLoading();
						}
						// 返回错误信息
						reject(res);
					}
				},
				fail: function (e = {
					CODE: -1,
					msg: errMsg,
					errMsg
				}) {
					let msg = e.errMsg;
					if (e.errMsg == 'request:fail timeout') {
						msg = '服务请求超时,请稍后重试'
					}
					wx.showToast({
						title: msg,
						icon: 'none'
					});
					reject(e)
				},
				complete: function () {
					// complete
				}
			})
		})


	});
	return promise;
}

module.exports = {
	fetch
}