uniapp封装请求方法
uniapp封装同步和异步请求方法,各位看官感兴趣的可以看看
·
uni.request
注:在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。
封装请求方法
-
新建api文件夹,统一管理接口相关内容
在文件.env.devlopment 和 .env.production 中设置 VUE_APP_BASE_URL=“/pdafbl”
-
封装请求方法
同步请求
// 设置公共路径
const baseUrl = process.env.VUE_APP_BASE_URL;
const request = (url, method, data, callback, hideLoading) => {
const headers = {
'content-type': 'application/json',
'x-requested-with': 'XMLHttpRequest'
};
// 如果调用接口不明确不显示 loading
if (!hideLoading) {
uni.showLoading({
title: '加载中'
});
}
uni.request({
url: (url.substr(0, 4) == 'http') ? url : (baseUrl + url),
data: data,
header: headers,
method: method,
success: (response) => {
if (!hideLoading) {
uni.hideLoading();
}
const result = response.data;
if (response.statusCode == 200) {
const head = response.header;
if (head.is_login === '0' && head.redirect_url) {
if (process.env.NODE_ENV === 'production')
window.location.href = head.redirect_url;
} else if (head.is_granted === '0') {
uni.showToast({
icon: "none",
title: "暂无权限,请先开通权限"
})
} else {
callback(result)
}
} else {
showError(response)
}
},
complete: () => {
if (!hideLoading) {
uni.hideLoading();
}
},
fail: () => {
if (!hideLoading) {
uni.hideLoading();
}
uni.showToast({
title: "请求失败,请重试",
icon: 'none',
duration: 1500
});
}
})
}
const showError = error => {
let errorMsg = ''
switch (error.statusCode) {
case 400:
errorMsg = '请求参数错误'
break
case 401:
errorMsg = '未授权,请登录'
break
case 403:
errorMsg = '跨域拒绝访问'
break
case 404:
errorMsg = '请求地址出错'
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: 2000,
complete: function() {
setTimeout(function() {
uni.hideToast();
}, 1000);
}
});
}
export default request;
异步请求
const baseUrl = process.env.VUE_APP_BASE_URL;
const request = (url = '', date = {}, type = 'POST', header = {
'content-type': 'application/x-www-form-urlencoded'
}) => {
return new Promise((resolve, reject) => {
uni.request({
method: type,
url: baseUrl + url,
data: date,
header: header,
dataType: 'json',
}).then((response) => {
setTimeout(function() {
uni.hideLoading();
}, 200);
let [error, res] = response;
resolve(res.data);
}).catch(error => {
let [err, res] = error;
reject(err)
})
});
}
export default request
接口统一管理
新建 api.js 文件,统一管理所有接口信息
import request from "./request.js"
export const login =(data, callback, hideLoading) => request(url, method, data, callback,
false);
调用方式
在页面中导入需要的接口
import { login } from "../../api/api.js"
methods:{
login(){
login().then(res=>{
console.log(res);
}).catch(error=>{
console.log(error);
})
}
}
优缺点
- 优点:请求方法封装在单独的文件夹中,页面中只需要调用,不需要其他的业务代码,便于维护
- 缺点:需要导入,导出,代码比方法一多一些
更多推荐
已为社区贡献1条内容
所有评论(0)