当前位置:首页 > 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 推送实现方法 uniapp 推送功能可以通过多种方式实现,主要包括使用第三方推送服务、原生插件或云服务。以下是几种常见的实现方案: 使用 UniPush 服务 UniPush 是…

uniapp请求超时处理

uniapp请求超时处理

uniapp请求超时处理方法 在uniapp中处理请求超时可以通过多种方式实现,以下是几种常见的处理策略: 设置全局请求超时时间 在main.js中配置全局请求超时时间,适用于所有请求: uni…

uniapp使用axios无法请求

uniapp使用axios无法请求

uniapp中使用axios请求问题解决方案 在uniapp中使用axios可能会遇到跨域、请求失败或兼容性问题。以下是常见原因及解决方法: 检查axios安装与引入 确保已正确安装axios:…

uniapp 如何封装request请求

uniapp 如何封装request请求

封装 request 请求的核心思路 在 UniApp 中封装请求通常基于 uni.request,通过统一处理 URL、参数、header 和拦截逻辑提升代码复用性。以下是一个完整封装方案: 创建…

uniapp 目录

uniapp 目录

uniapp 目录结构 uniapp 的目录结构遵循 Vue.js 项目的规范,同时包含一些特有的文件和目录。以下是典型的 uniapp 项目目录结构及其说明: project-name/ ├──…

uniapp gpio

uniapp gpio

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