uniapp封装request请求,判断token是否有效(接上一篇文章)

在common文件夹下创建 request.js

// BASE_URL只是请求url的前半部分
const BASE_URL = 'https://*****'

// token默认过期时间
var expiredTime = +new Date() +1800*1000

// 不需要登录的接口
const noToken = [
	'/auth/login'
];

const request = function(options={}) {
	 options.headers = options.headers || {}
	// 判断是否需要登录
	if (!(noToken.indexOf(options.url) >= 0)) {
		// 如果不需要登录
		// 判断token是否过期,过期强制登出,不过期,正常走下一步
		var expiredTimes = uni.getStorageSync('expiresIn') || expiredTime;
		var now = +new Date()
		if(expiredTimes - now < 0){
			// token失效,重新获取
			uni.reLaunch({
				url: '/pages/login/login',
			});
		}else{
			// token有效,不需要操作
			// 获取用户 token
			let userToken = uni.getStorageSync('Token')
			if (!userToken) {
				uni.reLaunch({
					url: '/pages/login/login',
				});
				return false;
			} else {
				// 将 token 放入请求头中
				options.headers['Authorization'] = 'Bearer ' + userToken
			}
		}
	}
	// 请求头信息
	options.headers = {
		'content-type': 'application/json;charset=utf-8'
	};
	
	// 如果调用接口不明确不显示 loading
	if (!options.hideLoading) {
		uni.showLoading({
			title: '加载中'
		});
	}
	return uni.request({
		url: BASE_URL + options.url,
		data: options.data,
		header: options.headers,
		method: options.method,
		success: (response) => {
			console.log(response,'response')
			if (!options.hideLoading) {
				uni.hideLoading();
			}
			// console.log(response.data)
			const result = response.data
			if (result.code == 500) {
				uni.showToast({
					icon: 'none',
					title: result.message,
					duration: 1500
				})
			} else {
				options.success(result)
			}
		},
		complete: () => {
			console.log(BASE_URL + options.url);
			uni.hideLoading();
		},
		fail: (error) => {
			console.log(error,'error')
			uni.hideLoading();
			if (error && error.response) {
				showError = error => {
					let errorMsg = ''
					switch (error.status) {
						case 400:
							errorMsg = '请求参数错误'
							break
						case 401:
							errorMsg = '未授权,请登录'
							break
						case 403:
							errorMsg = '跨域拒绝访问'
							break
						case 404:
							errorMsg = `请求地址出错: ${error.config.url}`
							break
						case 408:
							errorMsg = '请求超时'
							break
						case 500:
							errorMsg = '服务器内部错误'
							break
						case 501:
							errorMsg = '服务未实现'
							break
						case 502:
							errorMsg = '网关错误'
							break
						case 503:
							errorMsg = '服务不可用'
							break
						case 504:
							errorMsg = '网关超时'
							break
						case 505:
							errorMsg = 'HTTP版本不受支持'
							break
						default:
							errorMsg = error.msg
							break
					}
				
					uni.showToast({
						title: errorMsg,
						icon: 'none',
						duration: 1000,
						complete: function() {
							setTimeout(function() {
								uni.hideToast();
							}, 1000);
						}
					});
				}
				showError(error.response);
			}
		},
		timeout:30000
	})
}

export default request;

main.js

//封装请求
import {request} from 'common/request.js'
Vue.prototype.$request = request //挂载vue的原型上,全局可以使用

页面使用

this.$request({
					url: '/sys/version',
					data: {

					},
				}).then(res => {
					console.log(res)
})

如若不全局挂,即单个页面使用

<script>
	
	
	import request from '../../common/request.js';
	export default {
		
		
		  
		data() {
			return {
				
				
			};
			
		},
	
		
		methods:{ 
			
			 getData() {
			  // 定义请求参数
			  console.log("开始请求");
			  const options = {
			    url: '/classnamelist/get', // 请求的URL
			    method: 'GET',     // 请求方法,假设为GET
			    data: {            // 请求所需的数据
			      // 根据需要添加查询参数
			    },
			    success: (response) => {
			      // 请求成功处理
			      console.log('请求成功,返回数据:', response);
				  this.navclass=response.data
			    },
			    fail: (error) => {
			      // 请求失败处理
			      console.error('请求失败:', error);
			    }
			  };
			
			  // 调用 request 函数发送请求
			  request(options);
			},
			
	
		

	}
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值