当前位置:首页 > 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 推送功能可以通过多种方式实现,主要包括使用第三方推送服务、原生插件或云服务。以下是几种常见的实现方案: 使用 UniPush 服务 UniPush 是 D…

uniapp删除

uniapp删除

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

uniapp怎么使用

uniapp怎么使用

安装与开发环境搭建 下载HBuilderX作为开发工具,这是官方推荐的IDE,内置uniapp项目模板和调试工具。安装后通过新建项目选择uniapp模板,支持Vue.js语法。确保Node.js环境已…

uniapp 消息推送

uniapp 消息推送

uniapp 消息推送实现方法 使用uniPush服务 uniapp官方提供了uniPush服务,支持iOS、Android及小程序平台的消息推送。需要在manifest.json中配置推送模块,并按…

uniapp倒计时

uniapp倒计时

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

uniapp 极光推送

uniapp 极光推送

uniapp 集成极光推送的方法 在 uniapp 中集成极光推送,需要使用官方提供的插件或自行封装原生模块。以下是具体实现方式: 使用官方插件 在 uni-app 插件市场搜索「极光推送」插…