设置request超时时间
飞书小程序自带request网络请求包,可以通过app.json配置网络超时时间:
"networkTimeout": {
"request": 5000,
"connectSocket": 10000,
"uploadFile": 10000,
"downloadFile": 10000
}
封装网络请求
在程序中到处写tt.request()并不可取,一般我们需要将网络请求进行封装,简要方案:
1、get请求
2、post请求
3、如果网络反馈401(登录信息失效),则调用login()方法重新登录,再发起请求
login()方法这里不赘述。
import config from '../config/config'
import { login } from './auth'
let token = tt.getStorageSync("userToken")
let http = {
get: function (url, param={}) {
let headers = {}
if (!url.includes('login')) {
headers = {
Authorization: 'Token ' + token
}
}
return new Promise((resolve, reject) => {
tt.request({
url: `${config.serverUrl}` + url,
header: headers,
method: "get",
success(res) {
if (res.statusCode === 401) {
// 如果返回状态码为401,则进行重新登录
login().then(newToken => {
// 登录成功后更新token
token = newToken
// 重新发起请求
return http.get(url, param)
}).then(data => {
resolve(data)
}).catch(err => {
reject(err)
})
} else {
resolve(res.data)
}
},
fail(err) {
tt.showToast({
title: '网络请求出错,请稍后重试',
duration: 3000,
showCancel: false,
icon: 'none'
})
reject(err)
}
})
})
},
post: function (url, param={}) {
let headers = {}
if (!url.includes('login')) {
headers = {
Authorization: 'Token ' + token
}
}
return new Promise((resolve, reject) => {
tt.request({
url: `${config.serverUrl}` + url,
header: headers,
method: 'post',
data: JSON.stringify(param),
success(res) {
if (res.statusCode === 401) {
// 如果返回状态码为401,则进行重新登录
login().then(newToken => {
// 登录成功后更新token
token = newToken
// 重新发起请求
return http.post(url, param)
}).then(data => {
resolve(data)
}).catch(err => {
reject(err)
})
} else {
resolve(res.data)
}
},
fail(err) {
tt.showToast({
title: '网络请求出错,请稍后重试',
duration: 3000,
showCancel: false,
icon: 'none'
})
reject(err)
}
})
})
}
}
export default http
使用
封装后,我们在需要网络请求的地方直接调用即可:
import http from "./index"
export function getUserInfo(token) {
const url = '/api/users/user-info/current-user/'
return http.get(url)
}
以上。
因水平有限,上述内容可能存在问题,如发现请帮忙指出,避免误导更多人。