小程序封装request请求工具

使用示例

统一管理API :

1
2
3
4
const request = require('../utils/request')

// 首页数据
export const getIndexData = (data = {}) => request.get('/api/index', data, false)

在页面对应的js中引用:

1
import {getIndexData} from "../../service/index";

request.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import checkLogin from "./checkLogin";
import {baseUrl} from "./config"; // 接口url地址

const toast = (title, reject) => {
wx.showToast({
title,
icon: 'none'
})
reject(title)
}

const request = (url, method = "GET", data = {}, isLoading = true) => {
return new Promise((resolve, reject) => {
if (isLoading) {
wx.showLoading({title: '加载中..'})
}
wx.request({
url: baseUrl + url,
method,
data,
header: {
Authorization: 'Bearer ' + wx.getStorageSync('access_token') || ''
},
success(res) {
let msg = ''
const {statusCode} = res
// 400以下都是成功返回了
if (statusCode < 400) {
resolve(res.data)
} else if (statusCode === 400) { // 请求错误, 服务器返回了错误信息
msg = res.data.message
} else if (statusCode === 401) { // 未认证(未登录), token过期等
// 用户账号密码错误
if (res.data.message == 'Unauthorized') {
msg = '账号密码错误'
} else {
// 用户没有token, 或者token无效, 重定向登录页面
// 清空原来缓存的登录信息
wx.removeStorageSync('access_token')
wx.removeStorageSync('userInfo')
// 缓存来源地址, 并跳转到登录
checkLogin()
}
} else if (statusCode === 403) { // 没有权限
msg = '没有权限'
} else if (statusCode === 404) { // 资源不存在
msg = '未找到资源'
} else if (statusCode === 422) { // 表单验证未通过
const {errors} = res.data
msg = errors[Object.keys(errors)[0]][0]
} else if (statusCode === 429) { // 请求频率过快
msg = '请稍后再试'
} else {
msg = '请求异常'
}

// 统一提示
if(msg) toast(msg, reject)
},
fail(e) {
toast('服务器异常')
reject(e)
},
complete() {
wx.hideLoading()
}
})
})
}

const e = {
request,
get: (url, data = {}, isLoading = true) => request(url, 'GET', data, isLoading),
post: (url, data = {}, isLoading = true) => request(url, 'POST', data, isLoading),
patch: (url, data = {}, isLoading = true) => {
// 微信小程序不支持patch请求, 要处理一下
data = {
...data,
_method: 'PATCH'
}
// 使用post请求, 请求参数中的 _method 可以模拟要请求的方法, put patch delete 等
return request(url, 'POST', data, isLoading)
},
put: (url, data = {}, isLoading = true) => request(url, 'put', data, isLoading),
delete: (url, data = {}, isLoading = true) => request(url, 'DELETE', data, isLoading),
}

module.exports = e

小程序封装request请求工具

http://example.com/index/ac11/

作者

WZJ

发布于

2021-07-06

许可协议

评论