当前位置:首页 > 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设置背景

设置全局背景样式 在App.vue文件中添加全局样式,使用page选择器设置页面背景。这种方式会影响所有页面背景。 <style> page { background-color:…

uniapp关闭侧滑

uniapp关闭侧滑

禁用全局侧滑返回功能 在pages.json中配置全局禁止侧滑返回: { "globalStyle": { "popGesture": "none" } } 禁用单个页面侧滑…

uniapp 如何封装request请求

uniapp 如何封装request请求

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

uniapp 线程

uniapp 线程

uniapp 线程的概念 在 uniapp 中,线程的概念与原生应用开发有所不同。由于 uniapp 是基于 JavaScript 的运行环境,它并不直接支持多线程操作。JavaScript 本身是单…

uniapp 滑动

uniapp 滑动

uniapp 实现滑动效果的方法 在uniapp中实现滑动效果可以通过多种方式,包括使用内置组件、CSS动画或第三方插件。以下是几种常见的方法: 使用scroll-view组件 scroll-vi…

uniapp有用

uniapp有用

Uniapp 的优势 Uniapp 是一款基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布,适用于 iOS、Android、Web、小程序等多个平台。其核心优势包括: 跨平台兼容性:…