uniapp封装request请求,primise队列化,async await做同步处理,缓存token信息,登录处理流程

  • Post author:
  • Post category:uniapp


话不多数直接上代码!

在公司里做的朋友都知道,一般公司里面给的接口都需要在请求头里面加token才能访问,像注册登录之类的借口才会放到白名单里面,如果是自己练习,没有用到token的话,只需要将request.js里面的这些代码删除即可,不删除也可以使用

let cookie=uni.getStorageSync('cookies')
    if(cookie.data){
      app.globalData.bjHeader.Authorization = cookie.data.access_token;
    }
     if(data.isLogin&&res.data.code==200){// 登录请求
          // 将用户的cookie存入至本地
          uni.setStorageSync('cookies', res.data)
        }

正文开始!

在app.vue文件中加入globalData

  // 全局配置
		globalData: {
			    appid: '',                                  //小程序appid
			    Ip: ",             //固定不变得url部分  ip+端口号
			    Header: {                                             //request 请求头
			      'content-type': 'application/x-www-form-urlencoded;charset=utf-8', // 默认值
			      'Authorization': ''
			    },
		},

新建一个js文件在里面加上如下代码

const app = getApp({allowDefault: true})
export default  (url, data={}, method='GET') => {
  return new Promise((resolve, reject) => {
    let cookie=uni.getStorageSync('cookies')
    if(cookie.data){
      app.globalData.bjHeader.Authorization = cookie.data.access_token;
    }
    // 1. new Promise初始化promise实例的状态为pending
    uni.request({
      url: app.globalData.Ip + url,
      data,
      method,
      header:app.globalData.Header,
      success: (res) => {
        if(data.isLogin&&res.data.code==200){// 登录请求
          // 将用户的cookie存入至本地
          uni.setStorageSync('cookies', res.data)
        }
        resolve(res.data); // resolve修改promise的状态为成功状态resolved
      },
      fail: (err) => {
        console.log('请求失败: ', err);
        reject(err); // reject修改promise的状态为失败状态 rejected
      }
    })
  })
}

下面是登录的请求,在登录的vue文件中找到script

<script>
	const app = getApp({
		allowDefault: true
	})
	const url=''
	import request from ''
	export default {
		data() {
			return {
				appid: app.globalData.appid,
			}
		},
		methods: {
			dologn() {
				let that = this
				uni.login({
					success(res) {
						console.log(res)
						that.code=res.code
						that.login(that, res.code)
					},fail(err) {
						console.log(err)
					}
					
				})
			},
			//封装登录请求
			async login(that, code) {
				console.log(that.appid)
				// 登录
				let userInfo = await request(url, {
					appid: that.appid,
					code: code,
					is_login: true
				});
				if (userInfo.code == 200 && userInfo.data) {
					uni.reLaunch({
						url:'../home/index',
					})
				} else {
					console.log(userInfo)
					uni.showToast({
						title: '请退出,重新登陆!',
						icon: 'error'
			 	})
				}
			}
		}
	}
</script>

大致的就这么多了,如果有帮助到您,请给个关注,加个收藏,这将是我创作的最大力量,谢谢!



版权声明:本文为mrcaoyongkang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。