当前位置:首页 > uni-app

uniapp请求库封装

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

uniapp请求库封装方法

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

基础请求封装

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

uniapp请求库封装

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 }

使用示例

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

uniapp请求库封装

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模板库推荐 官方模板库 uni-app官方提供多个模板,涵盖电商、社交、新闻等多个领域。这些模板可直接在HBuilderX中通过新建项目选择,包含基础结构和常用功能模块,适合快速启动项目。…

uniapp前端项目

uniapp前端项目

Uniapp 前端项目开发指南 Uniapp 是一个基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布(如微信小程序、H5、App 等)。以下是关于 Uniapp 前端项目的关键信息: 环…

uniapp指南

uniapp指南

开发环境搭建 下载HBuilderX作为官方推荐的开发工具,支持Windows和Mac系统。安装后创建uni-app项目,选择模板(如默认模板、Hello Uni-app等)。确保Node.js版本在…

uniapp yuv

uniapp yuv

YUV 格式在 UniApp 中的应用 在 UniApp 中处理 YUV 格式数据通常涉及视频编解码、图像处理或摄像头数据采集。YUV 是一种颜色编码系统,常用于视频传输和图像处理,与 RGB 格式相…

uniapp工程

uniapp工程

uniapp工程简介 uniapp是一个基于Vue.js的跨平台开发框架,允许开发者使用一套代码同时生成iOS、Android、H5以及小程序应用。它通过条件编译和平台特性适配,实现多端兼容。 创建…

uniapp 摇骰子

uniapp 摇骰子

uniapp 摇骰子实现方法 页面布局 在 pages 目录下创建骰子页面(如 dice.vue),使用 view 和 image 组件构建骰子界面。骰子图片可通过静态资源或网络地址加载。 <…