当前位置:首页 > uni-app

uniapp请求库封装

2026-02-06 09:26:04uni-app

uniapp请求库封装方法

在uniapp中封装请求库可以提升代码复用性、统一错误处理和简化接口调用。以下是常见的封装方式:

基础请求封装

创建一个request.js文件,封装uni.request:

const baseURL = 'https://your-api-domain.com'

const request = (options) => {
  return new Promise((resolve, reject) => {
    uni.request({
      url: baseURL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        ...options.header
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(res.data)
        }
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

export default request

添加拦截器功能

扩展基础封装,加入请求和响应拦截:

let requestInterceptors = []
let responseInterceptors = []

const addRequestInterceptor = (callback) => {
  requestInterceptors.push(callback)
}

const addResponseInterceptor = (callback) => {
  responseInterceptors.push(callback)
}

const runInterceptors = async (interceptors, initialValue) => {
  let value = initialValue
  for (const interceptor of interceptors) {
    value = await interceptor(value)
  }
  return value
}

const enhancedRequest = async (options) => {
  try {
    const processedOptions = await runInterceptors(requestInterceptors, options)
    const response = await request(processedOptions)
    return await runInterceptors(responseInterceptors, response)
  } catch (error) {
    throw error
  }
}

export { enhancedRequest as request, addRequestInterceptor, addResponseInterceptor }

使用示例

在页面中调用封装好的请求:

import request from './request.js'

// 添加请求拦截器
request.addRequestInterceptor(config => {
  config.header.token = uni.getStorageSync('token')
  return config
})

// 添加响应拦截器
request.addResponseInterceptor(response => {
  if (response.code === 401) {
    uni.navigateTo({ url: '/pages/login/login' })
  }
  return response
})

// 发起请求
const fetchData = async () => {
  try {
    const res = await request({
      url: '/api/user',
      method: 'POST',
      data: { id: 123 }
    })
    console.log(res)
  } catch (err) {
    console.error(err)
  }
}

TypeScript支持

如需TypeScript支持,可添加类型定义:

interface RequestOptions {
  url: string
  method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
  data?: any
  header?: Record<string, string>
}

interface ResponseData {
  code: number
  data: any
  message?: string
}

const request = (options: RequestOptions): Promise<ResponseData> => {
  // 实现同上
}

高级功能扩展

可根据需要添加以下功能:

uniapp请求库封装

  • 请求取消
  • 自动重试
  • 请求缓存
  • 文件上传下载封装
  • 超时处理

这种封装方式使项目中的网络请求更加统一规范,便于维护和扩展。根据实际项目需求可调整封装层级和功能。

标签: uniapp
分享给朋友:

相关文章

uniapp树形选择

uniapp树形选择

uniapp树形选择实现方法 使用uni-data-checkbox组件 uniapp内置的uni-data-checkbox组件支持树形结构选择,适用于多级分类场景。配置时需要将数据格式化为树形结构…

uniapp特性

uniapp特性

uniapp的核心特性 跨平台开发 uniapp支持一套代码编译到多个平台,包括iOS、Android、H5、微信小程序、支付宝小程序、百度小程序、字节跳动小程序等。开发者无需为不同平台单独编写代码。…

uniapp 用法

uniapp 用法

uniapp 基本概念 uniapp 是一个基于 Vue.js 的跨平台开发框架,支持编译到 iOS、Android、H5 及小程序等多端。其核心特点是“一次开发,多端发布”,通过条件编译实现平台差异…

丸子uniapp

丸子uniapp

丸子UniApp简介 丸子UniApp是一个基于UniApp框架开发的移动应用解决方案,通常用于快速构建跨平台应用(如微信小程序、H5、Android/iOS等)。其核心特点是利用UniApp的“一次…

uniapp gpio

uniapp gpio

在 uniapp 中直接操作 GPIO(通用输入输出)通常需要依赖原生平台的硬件接口,因为 uniapp 本身是基于前端技术的跨平台框架,不直接提供硬件访问能力。以下是实现 GPIO 控制的几种方法:…

uniapp 3.0

uniapp 3.0

uniapp 3.0 核心特性 uniapp 3.0 是 DCloud 推出的跨端开发框架升级版本,支持一套代码编译到 iOS、Android、Web 及各类小程序平台。以下为关键特性与使用要点:…