给uniapp请求自定义拦截器

请求拦截器代码如下,config为请求体的配置项,自定义处理后再把config传递下去

const beforeRequest = (config) => {
  //config为配置项
  return new Promise((resolve) => {
		let errorMessage = ""
		switch (true) {
			case config.url === "":errorMessage = "url不能为空";break;
			case config.methodsMap.indexOf(config.method) === -1:errorMessage = "请求体method错误";break;
		}
		if (errorMessage != "") {
			uni.showToast({
				title: errorMessage, icon: 'error', duration: 850
			});
			throw (errorMessage)
		}
    if (!!uni.getStorageSync('token')) config.header.authorization = uni.getStorageSync('token')
    resolve(config)//传递处理过的配置项
  })
}

拦截器代码如下,获取响应数据,对异常数据做统一的处理,最后返回成功响应的数据

const afterResponse = (res) => {
  return new Promise((resolve) => {
    if (res.data.code === 200&&res.statusCode===200) {
			resolve(res.data) 
		}
		else {
      uni.showToast({
        title: res.data.message||res.data, icon: 'error', duration: 850
      });
      throw (res.data.message||res.data)
    }
  })
}

数据请求代码如下,从beforeRequest获取到处理过的config用uni.request

export function request(params) {
	const config = {
		methodsMap : ['get', 'post', 'put', 'patch', 'delete', 'update'],
		baseURL : "http://localhost:1888",
		header : {authorization: ""},
		...params
	}
 return beforeRequest(config).then(async(beforeRequestConfig) => {
	 const {url,baseURL,method,data,header} = beforeRequestConfig
     const res = await uni.request({
      url: baseURL+url, method, data, header
     })
     return afterResponse(res)
  })
}

请求api的代码如下

 import {request} from "../utils/request.js"
 export function getList(data) {
 	return request({
 		url: "/user/list",
 		method: 'get',
		data
 	})
 }

 export function login(){
	 return request({
		 url:"/user/login1",
		 method:'post',
		 data:{username:"admin",password:'111111'}
	 })
 }

 萌新写文,多多指教

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值