请求拦截器代码如下,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'}
})
}
萌新写文,多多指教