当前位置:首页 > uni-app

uniapp 网络封装

2026-01-14 18:46:54uni-app

uniapp 网络请求封装方法

uniapp 提供了 uni.request 方法进行网络请求,但直接使用可能导致代码重复和维护困难。封装网络请求可以提高代码复用性和可维护性。

基础封装示例

创建一个 http.js 文件,封装基础请求方法:

uniapp 网络封装

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

function 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)
        }
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

添加拦截器功能

扩展封装以支持请求和响应拦截:

const interceptors = {
  request: [],
  response: []
}

function useRequestInterceptor(interceptor) {
  interceptors.request.push(interceptor)
}

function useResponseInterceptor(interceptor) {
  interceptors.response.push(interceptor)
}

async function request(options) {
  let config = {...options}

  // 请求拦截
  for (const interceptor of interceptors.request) {
    config = await interceptor(config)
  }

  return new Promise((resolve, reject) => {
    uni.request({
      ...config,
      url: baseURL + config.url,
      success: async (res) => {
        let response = res
        // 响应拦截
        for (const interceptor of interceptors.response) {
          response = await interceptor(response)
        }
        resolve(response.data)
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

常用方法封装

基于基础请求方法封装常用 HTTP 方法:

uniapp 网络封装

export const http = {
  get(url, params, options = {}) {
    return request({
      url,
      method: 'GET',
      data: params,
      ...options
    })
  },

  post(url, data, options = {}) {
    return request({
      url,
      method: 'POST',
      data,
      ...options
    })
  },

  put(url, data, options = {}) {
    return request({
      url,
      method: 'PUT',
      data,
      ...options
    })
  },

  delete(url, data, options = {}) {
    return request({
      url,
      method: 'DELETE',
      data,
      ...options
    })
  }
}

使用示例

在页面中引入并使用封装后的方法:

import { http } from './http.js'

// 基本使用
http.get('/user', {id: 1}).then(res => {
  console.log(res)
}).catch(err => {
  console.error(err)
})

// 添加拦截器
useRequestInterceptor(config => {
  const token = uni.getStorageSync('token')
  if (token) {
    config.header = {
      ...config.header,
      'Authorization': `Bearer ${token}`
    }
  }
  return config
})

useResponseInterceptor(response => {
  if (response.statusCode === 401) {
    uni.navigateTo({url: '/pages/login/login'})
  }
  return response
})

错误处理增强

添加统一的错误处理逻辑:

function request(options) {
  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      url: baseURL + options.url,
      success: (res) => {
        if (res.statusCode >= 200 && res.statusCode < 300) {
          resolve(res.data)
        } else {
          handleError(res)
          reject(res)
        }
      },
      fail: (err) => {
        handleError(err)
        reject(err)
      }
    })
  })
}

function handleError(error) {
  const status = error.statusCode
  let message = ''

  switch(status) {
    case 400:
      message = '请求错误'
      break
    case 401:
      message = '未授权,请登录'
      break
    case 403:
      message = '拒绝访问'
      break
    case 404:
      message = '请求地址不存在'
      break
    case 500:
      message = '服务器内部错误'
      break
    default:
      message = '网络连接失败'
  }

  uni.showToast({
    title: message,
    icon: 'none'
  })
}

封装注意事项

  1. 统一管理 API 地址,方便环境切换
  2. 添加请求超时设置
  3. 考虑添加取消请求功能
  4. 处理网络异常情况
  5. 添加 loading 状态管理
  6. 考虑添加请求重试机制
  7. 支持文件上传下载封装

通过以上封装,可以大大简化 uniapp 项目中的网络请求代码,提高开发效率和代码质量。

标签: 网络uniapp
分享给朋友:

相关文章

uniapp倒计时

uniapp倒计时

uniapp倒计时的实现方法 在uniapp中实现倒计时功能可以通过多种方式完成,以下是几种常见的实现方法: 使用setInterval实现基础倒计时 通过JavaScript的setInterva…

uniapp极光推送

uniapp极光推送

uniapp极光推送集成步骤 准备工作 注册极光推送开发者账号,创建应用获取AppKey。确保uniapp项目已配置好原生插件支持。 安装插件 在uniapp项目manifest.json文件中,…

uniapp怎么启动

uniapp怎么启动

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

uniapp隐藏滚动条

uniapp隐藏滚动条

在UniApp中隐藏滚动条可以通过以下几种方法实现,具体根据使用场景选择: 全局样式设置(APP/H5) 通过修改全局CSS样式隐藏滚动条,适用于所有页面: ::-webkit-scrollbar…

uniapp样式库

uniapp样式库

uniapp 常用样式库推荐 uView UI uView 是专为 uniapp 设计的多端兼容 UI 框架,提供丰富的组件和工具类。支持 Vue3 组合式 API,内置主题定制功能,常用于快速构建企…

uniapp请求超时处理

uniapp请求超时处理

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