uni-app 路由拦截器、请求拦截器

目录

一、路由拦截器

1、author.js文件(封装持久化存储、取值、移除的方法)

2、拦截器(跳转到登录页面时一定要写‘return false’)

(2)自己写的拦截器

二、请求拦截器

1、下载网址

2、使用方式

(1)拦截器request文件夹内的index.js文件中修改后端的baseUrl网址

(2)在api文件夹内的.js文件中引入拦截器request文件夹内的index.js文件

 (3)使用网络请求时,用service.request()的方法


一、路由拦截器

1、author.js文件(封装持久化存储、取值、移除的方法)


const authorKey = 'AUTHOR-KEY'
 
 export const setAuthor = (value)=>{
	 uni.setStorageSync(authorKey,value)
 }
 export const getAuthor = ()=>{
	 return uni.getStorageSync(authorKey)
 }
 
 export const removeAuthor = ()=>{
	 uni.removeStorageSync(authorKey)
 }

2、拦截器(跳转到登录页面时一定要写‘return false’)

不写return false会报错

	
import {getAuthor} from '@/utils/author.js'
export const useRouterInterceptor = () => {
	const whiteList = [
	  '/', // 注意入口页必须直接写 '/'
	  '/pages/login/login',
	  '/pages/home/home',
	  '/',
	  '/pages/detail/detail'
	]
	const arr = ['switchTab','navigateTo','redirectTo']
	arr.forEach(item=>{
		uni.addInterceptor(item, {
			invoke(args) {
				// 1. 白名单直接放行
				// 获取要跳转的页面路径(url去掉"?"和"?"后的参数)
				let url = args.url
				if(url && url.indexOf('?') !== -1){
					url = args.url.split('?')[0]
				}
				
				let pass = whiteList.some((item) => url === item)
				if(pass) return args
				// 2. 统一登录身份认证
				// 2.1 获取登录保存的token,如果存在放行,不存在跳转到登录界面
				let token = getAuthor()
				if(!token) {
					uni.showToast({
					  title: '请先登录',
					})
					uni.navigateTo({
					  url: "/pages/login/login"
					})
					return false
				}
				console.log('跳转前执行 ', args);
				return args
			},
		})
	})
	
}

(2)自己写的拦截器

import {getUser,removeUser} from '@/utils/user.js'
export const useRouterInterceptor = () => {

		//设置可以放行的路由白名单
		const whiteList = [
			'/', //首页路径为什么是/
			'/pages/category/category',
			'/pages/person/person',
			'/pages/login/login'
		]
		//设置路由拦截的操作
		const arr = ['navigateTo', 'redirectTo', 'switchTab']
		arr.forEach(item => {
					uni.addInterceptor(item, {
						invoke(args) {
							let url = args.url
							if (url && url.indexOf('?') != -1) {
								url = url.splite('?')[0]
							}
							if (whiteList.some(item => item === url)) return
							let token = getUser()	
							if (token)return
								uni.showToast({
								title: '请先登录',
							  })
							 uni.navigateTo({
							    url: "/pages/login/login"
							 	})
							return false
							}
					})
				})
}

二、请求拦截器

1、下载网址

uni-app请求拦截器-Typescript文档类资源-CSDN下载

2、使用方式

(1)拦截器request文件夹内的index.js文件中修改后端的baseUrl网址

(2)在api文件夹内的.js文件中引入拦截器request文件夹内的index.js文件

 (3)使用网络请求时,用service.request()的方法

// 请求banner资源
export const RequestBannerList=()=>{
    return service.request({
     url:'/api/shop/banner',
     method:'get',
     data:''
    })
 }

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值