当前位置:首页 > uni-app

uniapp 网络封装

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

uniapp 网络请求封装方法

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

基础封装示例

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

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 方法:

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
})

错误处理增强

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

uniapp 网络封装

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 get

uniapp get

uniapp 获取数据的方法 在 uniapp 中获取数据可以通过多种方式实现,包括 API 请求、本地存储、页面传参等。以下是一些常见的方法: API 请求获取数据 使用 uni.request…

uniapp营销

uniapp营销

营销策略 采用社交媒体推广,结合微信、微博、抖音等平台进行内容营销。通过短视频、直播等形式展示产品特点,吸引用户关注。利用KOL合作,扩大品牌影响力,提高用户信任度。 用户裂变 设计裂变活动…

uniapp审批

uniapp审批

uniapp审批流程实现 在uniapp中实现审批功能,通常需要结合前端界面和后端逻辑。以下是几种常见的实现方式: 前端界面设计 使用uniapp的组件和API构建审批界面,包括表单提交、审批列表展…

投票 uniapp

投票 uniapp

uniapp 投票功能实现 uniapp 是一个基于 Vue.js 的跨平台开发框架,可以用于开发微信小程序、H5、App 等多种应用。实现投票功能需要结合前端界面和后端数据处理。 前端界面设计 使…

uniapp 气泡

uniapp 气泡

uniapp 气泡实现方法 在 uniapp 中实现气泡效果可以通过多种方式,以下是常见的几种方法: 使用 CSS 样式实现气泡 通过 CSS 的 border 和 ::after 伪元素可以创建气…

uniapp显示不全

uniapp显示不全

uniapp显示不全的常见原因及解决方法 页面布局问题 检查页面布局是否超出屏幕范围,确保根元素或外层容器设置正确的宽度和高度。使用flex布局或百分比单位适应不同屏幕尺寸。 滚动区域未设置 在需要…