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

uniapp设置title

设置页面标题的方法 在UniApp中设置页面标题可以通过以下几种方式实现,适用于不同场景和需求。 通过pages.json配置 在pages.json文件中,可以为每个页面单独配置导航栏标题。找到对…

任务 uniapp

任务 uniapp

uniapp 简介 Uniapp 是一款基于 Vue.js 的跨平台开发框架,支持一次开发,多端发布(如微信小程序、H5、App、快应用等)。其核心优势在于代码复用率高,开发者可以通过一套代码适配多个…

uniapp 壁纸

uniapp 壁纸

使用 Uniapp 开发壁纸应用的方法 实现壁纸展示与切换功能 在 Uniapp 中,可通过 swiper 组件实现壁纸轮播展示。结合 image 组件加载本地或网络壁纸资源,动态绑定 src 属性实…

uniapp 线程

uniapp 线程

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

uniapp 字体设置

uniapp 字体设置

uniapp 字体设置方法 uniapp 中设置字体可以通过以下几种方式实现,适用于不同场景和需求。 全局字体设置 在 App.vue 文件中通过样式定义全局字体,确保所有页面继承该字体设置。…

uniapp开发

uniapp开发

uniapp开发简介 uniapp(DCloud出品)是一款基于Vue.js的跨平台开发框架,支持一次开发,多端发布(iOS、Android、Web、小程序等)。其核心优势在于代码复用率高,开发效率高…