当前位置:首页 > uni-app

uniapp 如何封装request请求

2026-03-04 19:31:19uni-app

封装请求的基本思路

在Uniapp中封装request请求可以提升代码复用性、统一处理错误和简化调用。核心思路是将uni.request方法进行二次封装,加入全局配置、拦截器和错误处理逻辑。

创建请求配置文件

新建一个名为http.js的文件,存放封装的请求逻辑。定义基础URL和默认请求头:

const baseURL = 'https://api.example.com'
const defaultHeader = {
  'Content-Type': 'application/json'
}

实现基础请求方法

封装核心请求函数,处理请求和响应:

function request(options) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: baseURL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: Object.assign({}, defaultHeader, options.header),
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(res)
        }
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

添加请求拦截器

在发送请求前可添加拦截逻辑处理公共参数:

function requestWithInterceptor(options) {
  const token = uni.getStorageSync('token')
  if (token) {
    options.header = options.header || {}
    options.header.Authorization = `Bearer ${token}`
  }

  return request(options)
}

实现便捷方法

封装常用HTTP方法简化调用:

export default {
  get(url, params) {
    return requestWithInterceptor({ url, method: 'GET', data: params })
  },
  post(url, data) {
    return requestWithInterceptor({ url, method: 'POST', data })
  },
  put(url, data) {
    return requestWithInterceptor({ url, method: 'PUT', data })
  },
  delete(url, data) {
    return requestWithInterceptor({ url, method: 'DELETE', data })
  }
}

全局错误处理

添加统一错误处理机制:

function handleError(error) {
  if (error.statusCode === 401) {
    uni.navigateTo({ url: '/pages/login/login' })
  }
  uni.showToast({
    title: error.data.message || '请求失败',
    icon: 'none'
  })
}

function safeRequest(options) {
  return requestWithInterceptor(options).catch(handleError)
}

最终使用示例

在页面中导入并使用封装好的请求:

import http from '@/utils/http.js'

// GET请求
http.get('/user/info', { id: 123 }).then(data => {
  console.log(data)
})

// POST请求
http.post('/user/create', { name: 'test' }).then(data => {
  console.log(data)
})

高级扩展建议

对于更复杂的需求,可以考虑以下扩展方向:

uniapp 如何封装request请求

  • 添加请求缓存机制
  • 实现请求重试功能
  • 支持文件上传下载
  • 添加请求超时控制
  • 集成TypeScript类型定义

标签: uniapprequest
分享给朋友:

相关文章

uniapp删除

uniapp删除

卸载 uniapp 项目依赖 在项目根目录下执行以下命令,移除 node_modules 和依赖锁文件: rm -rf node_modules package-lock.json 如需清理全局…

uniapp怎么启动

uniapp怎么启动

启动UniApp项目的步骤 确保已安装Node.js(建议版本12+)和HBuilderX(官方IDE)。若未安装,需先下载并配置环境。 安装开发工具 从HBuilderX官网下载对应操作系统的版本…

uniapp接入

uniapp接入

接入UniApp的基本流程 UniApp是一个基于Vue.js的跨平台开发框架,支持一次开发,多端发布。以下是接入UniApp的基本流程: 环境准备 确保已安装Node.js(建议版本12+)和HB…

uniapp 画板

uniapp 画板

uniapp 实现画板功能的方法 在 uniapp 中实现画板功能,可以通过 canvas 组件结合触摸事件来完成。以下是一个基本的实现方案: 基本画板实现 在 template 中添加 canva…

介绍uniapp

介绍uniapp

Uniapp 概述 Uniapp 是一款基于 Vue.js 的跨平台开发框架,允许开发者使用一套代码同时生成 iOS、Android、Web 以及小程序应用。其核心优势在于高效开发和代码复用,大幅降低…

uniapp定位描述

uniapp定位描述

uniapp定位功能实现 uniapp提供了多种定位方式,包括H5、小程序和App端的定位功能。通过uni.getLocation方法可以获取设备当前位置信息。 基本定位方法 使用uni.getLo…