飞书小程序网络请求封装&如何设置超时时间

设置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)
}

以上。
因水平有限,上述内容可能存在问题,如发现请帮忙指出,避免误导更多人。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容