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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章