// 设置api地址
const baseUrl = 'https://center.xxx.com/center/graphql'
// url:地址 date:数据
// type:method的类型,默认是post
// header:请求头参数
const request = (url = '', date = {}, type = 'POST', header = {
}) => {
return new Promise((resolve, reject) => {
uni.request({
method: type,
url: baseUrl + url,
data: date,
header: {
"Authorization": uni.getStorageSync('userInfo').token || ''
},
dataType: 'json',
}).then((response) => {
setTimeout(function() {
uni.hideLoading();
}, 200);
let [error, res] = response;
resolve(res.data);
}).catch(error => {
let [err, res] = error;
uni.hideLoading();
reject(err)
})
});
}
// 导出
export default request
resolve()
,错误返回用reject()
return new Promise((resolve, reject) => {
uni.request({
method: type,
url: baseUrl + url,
data: date,
header: {
"Authorization": uni.getStorageSync('userInfo').token || ''
},
dataType: 'json',
success: res => {
console.log(res)
if (res.statusCode == 403) {
uni.showToast({
title: '拒绝访问',
icon: 'none'
});
return reject()
}
//...其他错误提醒一样处理
//成功的处理函数 这边的code表示请求结果
switch (res.data.code) {
case 1:
//成功
if (res.data.message) {
uni.showToast({
title: res.data.message,
icon: 'success'
})
}
uni.hideLoading()
return resolve(res.data.data)
break
case 0:
// 失败
uni.showToast({
title: res.data.message,
icon: 'none'
})
uni.hideLoading()
return reject()
break
case 401:
// 未授权或者过期 跳转到提醒页面
uni.navigateTo({
url: '/pages/index/index',
})
uni.hideLoading()
return reject()
break
// 其他的code
default:
uni.showToast({
title: res.data.message,
icon: 'none'
})
uni.hideLoading()
return reject()
break
}
},
fail: parmas => {
console.log(parmas)
uni.hideLoading()
switch (parmas.code) {
case 401:
uni.clearStorageSync()
break
default:
uni.showToast({
title: '网络不给力~',
icon: 'none'
})
return reject(parmas)
break
}
}
})
main.js
文件,按下面的图片配置进行全局挂载,就可以在任一页面使用封装的request
// 示例微信请求登录
let date = {
variables: {
code: this.code,
date: arr.encryptedData,
iv: arr.iv
}
}
this.$request('', date).then(res => {
// 打印调用成功回调,res就是整个请求返回
console.log(res)
var list = res.data.wxLogin
let pram = {
nickname: list.nickname,
token: list.token,
userid: list.uid,
headImg: list.headimgurl
}
this.$store.commit("login", pram)
// 提示
uni.showToast({
title: '登录成功',
icon: 'none'
})
// 延时跳转页面
setTimeout(function() {
uni.switchTab({
url: '../index/index'
})
}, 1500);
})
上面有讲到一个全局挂载方法,注意下面:
Vue.prototype.方法名 = 方法名
进行全局挂载,然后用 this.方法名
进行调用。 // 在main.js中先引入
import request from 'common/request.js'
// 全局挂载
Vue.prototype.$request = request
// 使用方法
this.$request('', date).then(res => {
......
})
app.config.globalProperties.$方法名= 方法名
进行挂载。