uniapp 封装好的request.js文件(包含响应拦截功能)

uniapp 封装好的request.js文件(包含响应拦截功能)

import Vue from 'vue'
import Request from './core/Request'
import {
	isObject
} from './utils.js'
import {doLoginFromCache} from '@/static/api/login.js'
import { getToken} from '@/static/utils/auth'
import store from '@/store/index.js'

var request = new Request();
/* 
普通的请求 
 */
/**
 * 自定义验证器,如果返回true 则进入响应拦截器的响应成功函数(resolve),否则进入响应拦截器的响应错误函数(reject)
 * @param { Number } statusCode - 请求响应体statusCode(只读)
 * @return { Boolean } 如果为true,则 resolve, 否则 reject
 */
request.validateStatus = (statusCode) => { // 默认
	return statusCode && statusCode >= 200 && statusCode < 300
}
/* 请求拦截器  */
request.interceptor.request(request => {
	const header = request.header
	// console.log("getToken() = " + getToken())
	header['Authorization'] = getToken()
	request.header = header
	return request
})
request.interceptor.response((response) => {
		/**
		 * 响应拦截
		 */
		if (response && response.data) {
			const data = response.data
			const status = data.status
			if (status >= 200 && status < 300) {
				return data.data;
			}else {
				if(data.message){
					uni.showToast({
						title: data.message,
						icon: "none"
					})
				}
			}
		}
		console.log(response)
		return response
	},
	(response) => { /*  对响应错误做点什么 (statusCode !== 200),必须return response*/
		console.error(response)
		let message = isObject(response) ? response.errMsg : response
		if(isObject(response) && response.data && response.data.message){
			message = response.data.message
			if(response.statusCode == 401){
				/* 该请求需要授权登录访问
					1:判断缓存中是否有用户的账号密码信息
						如果有,直接执行登录
						如果没有,跳转到登录界面
				*/
				const result = doLoginFromCache(store.state.loginFrom.request)
				console.log(result,'报错的信息');
				if(result){
					// 缓存用户信息获取成功
					uni.showToast({
						title: "出错了,请重试",
						icon: "none"
					})
				}else{
					// 缓存用户信息获取失败
					//跳转到登录界面
					uni.navigateTo({
						url:"/pages/login/login",
						animationDuration: 200
					})
					
				}				
				return response
			}			
		}
		uni.showToast({
			title: message,
			icon: "none"
		})
		// console.error(response)

		return response
	})

export {
	request
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章