请求后端接口全攻略:通用封装 + 请求拦截器,一篇就够!

www.jswusn.com Other 2025-04-21 09:48:35 16次浏览


请求后端接口全攻略:通用封装 + 请求拦截器,一篇就够!

UniApp 中与后端接口交互最常用的方式是 uni.request,但如果你每次都手动调用、拼地址、写 headers,会非常冗余、易错。

本文将手把手带你:

  • • 掌握 uni.request 的基本用法
  • • 封装通用请求方法
  • • 加入请求/响应拦截器(如 token 注入、统一错误处理)

 uni.request 基础用法

uni.request({
  url: 'https://api.example.com/user',
  method: 'GET',
  data: { id: 1 },
  success: (res) => {
    console.log('响应数据:', res.data)
  },
  fail: (err) => {
    console.error('请求失败:', err)
  }
})

默认支持所有平台,包括 H5、小程序、App。

 封装通用 request 方法

我们创建一个统一的 request.js 工具模块,集中处理:

  • • 基础 URL 拼接
  • • 请求方法封装(get/post 等)
  • • token 注入(请求拦截器)
  • • 状态码统一处理(响应拦截器)

 文件目录结构推荐

├── utils/
│   └── request.js     # 请求封装模块
├── config/
│   └── index.js       # 全局配置项,如 baseURL

config/index.js:配置项

export default {
  baseURL: 'https://api.example.com',
  timeout: 10000
}

 utils/request.js:通用封装

import config from '@/config/index.js'
import { get } from './storage.js'  // 用于获取 token 等缓存

const request = (options = {}) => {
  const {
    url,
    method = 'GET',
    data = {},
    headers = {}
  } = options

  return new Promise((resolve, reject) => {
    uni.request({
      url: config.baseURL + url,
      method,
      data,
      timeout: config.timeout,
      header: {
        'Content-Type': 'application/json',
        'Authorization': get('token') || '',  // 请求拦截器:自动加 token
        ...headers
      },
      success: (res) => {
        const { statusCode, data } = res

        // 响应拦截器
        if (statusCode === 200) {
          resolve(data)
        } else {
          uni.showToast({ title: data.message || '请求错误', icon: 'none' })
          reject(data)
        }
      },
      fail: (err) => {
        uni.showToast({ title: '网络异常', icon: 'none' })
        reject(err)
      }
    })
  })
}

// 快捷方法封装
export const getRequest = (url, data = {}) => request({ url, data, method: 'GET' })
export const postRequest = (url, data = {}) => request({ url, data, method: 'POST' })

export default request


 使用方式(更优雅)

 示例页面中使用

import { getRequest, postRequest } from '@/utils/request.js'

// 获取用户信息
getRequest('/user/info').then(res => {
  console.log('用户信息:', res)
})

// 提交表单
postRequest('/form/submit', { name: 'Tom' }).then(res => {
  uni.showToast({ title: '提交成功' })
})


 拦截器核心能力

拦截阶段
功能
请求前
自动加 token / 签名 / 公共参数
响应后
统一处理错误 / 弹出提示框
请求失败
网络错误统一提示

 小结

能力点
收获
uni.request
理解基础使用方法
模块封装
构建统一请求管理方式
拦截器设计
提高代码复用性与健壮性


上一篇:没有了!

Other

下一篇:4个 Vue 路由实现的过程

技术分享

苏南名片

  • 联系人:吴经理
  • 电话:152-1887-1916
  • 邮箱:message@jswusn.com
  • 地址:江苏省苏州市相城区

热门文章

Copyright © 2018-2025 jswusn.com 版权所有

技术支持:苏州网站建设  苏ICP备18036849号