Uniapp接口封装全攻略:高效开发必备

uniapp 请求接口封装与使用指南

封装请求的必要性

在 uniapp 开发中,直接使用 uni.request 会导致代码重复、维护困难。封装请求接口可以统一处理错误、添加全局配置(如 baseURL、超时时间)、简化调用方式。

基础封装实现

创建一个 request.js 文件,实现基础请求封装:

const BASE_URL = 'https://api.example.com';

function request(options) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
           header: {
        'Content-Type': 'application/json',
        ...options.header
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(res.data);
        }
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}

高级功能扩展

在基础封装上增加拦截器、Token 管理和错误统一处理:

// 请求拦截器
function requestInterceptor(config) {
  const token = uni.getStorageSync('token');
  if (token) {
    config.header = {
      ...config.header,
      Authorization: `Bearer ${token}`
    };
  }
  return config;
}

// 响应拦截器
function responseInterceptor(response) {
  if (response.data.code !== 200) {
    uni.showToast({
      title: response.data.message || '请求失败',
      icon: 'none'
    });
    return Promise.reject(response.data);
  }
  return response.data;
}

// 更新后的 request 函数
async function enhancedRequest(options) {
  try {
    const config = requestInterceptor(options);
    const response = await baseRequest(config);
    return responseInterceptor(response);
  } catch (error) {
    uni.showToast({
      title: error.message || '网络错误',
      icon: 'none'
    });
    throw error;
  }
}

模块化 API 管理

创建 api.js 集中管理所有接口:

import request from './request';

export const userApi = {
  login: (data) => request({ url: '/user/login', method: 'POST', data }),
  getProfile: () => request({ url: '/user/profile' })
};

export const productApi = {
  list: (params) => request({ url: '/products })
};

实际使用示例

在页面中调用封装好的 API:

import { userApi } from '@/api';

export default {
  methods: {
    async handleLogin() {
      try {
        const res = await userApi.login({
          username: 'admin',
          password: '123456'
        });
        console.log('登录成功', res);
      } catch (error) {
        console.error('登录失败', error);
      }
    }
  }
};

性能优化建议

对于高频接口可以添加缓存机制,使用 uni.setStorageSync 存储接口数据,在有效期内直接读取缓存。对于上传/下载大文件,建议使用 uni.uploadFileuni.downloadFile 单独处理。

TypeScript 支持

如需更好的类型提示,可以添加类型定义:

interface RequestOptions {
  url: string;
  method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
  data?: any;
  header?: Record<string, string>;
}

interface ResponseData<T = any> {
  code: number;
  message: T;
}

function request<T>(options: RequestOptions): Promise<ResponseData<T>>;

注意事项

跨域问题需在 manifest.json 中配置合法域名。真机调试时需要确保手机与服务器在同一局域网,或使用 HTTPS 协议。小程序端需将域名加入白名单。

通过这种封装方式,可以实现代码复用、统一管理接口、简化业务逻辑调用,显著提升开发效率和可维护性。

BbS.okacop060.info/PoSt/1120_804180.HtM
BbS.okacop061.info/PoSt/1120_917296.HtM
BbS.okacop062.info/PoSt/1120_176793.HtM
BbS.okacop063.info/PoSt/1120_902403.HtM
BbS.okacop065.info/PoSt/1120_484230.HtM
BbS.okacop066.info/PoSt/1120_012428.HtM
BbS.okacop067.info/PoSt/1120_931004.HtM
BbS.okacop068.info/PoSt/1120_164527.HtM
BbS.okacop069.info/PoSt/1120_023447.HtM
BbS.okacop070.info/PoSt/1120_054558.HtM
BbS.okacop060.info/PoSt/1120_724114.HtM
BbS.okacop061.info/PoSt/1120_392309.HtM
BbS.okacop062.info/PoSt/1120_033360.HtM
BbS.okacop063.info/PoSt/1120_261742.HtM
BbS.okacop065.info/PoSt/1120_441408.HtM
BbS.okacop066.info/PoSt/1120_353855.HtM
BbS.okacop067.info/PoSt/1120_437262.HtM
BbS.okacop068.info/PoSt/1120_647129.HtM
BbS.okacop069.info/PoSt/1120_011635.HtM
BbS.okacop070.info/PoSt/1120_881033.HtM
BbS.okacop060.info/PoSt/1120_087710.HtM
BbS.okacop061.info/PoSt/1120_983830.HtM
BbS.okacop062.info/PoSt/1120_173821.HtM
BbS.okacop063.info/PoSt/1120_441634.HtM
BbS.okacop065.info/PoSt/1120_231732.HtM
BbS.okacop066.info/PoSt/1120_267401.HtM
BbS.okacop067.info/PoSt/1120_008581.HtM
BbS.okacop068.info/PoSt/1120_677166.HtM
BbS.okacop069.info/PoSt/1120_030634.HtM
BbS.okacop070.info/PoSt/1120_588409.HtM
BbS.okacop060.info/PoSt/1120_474663.HtM
BbS.okacop061.info/PoSt/1120_408006.HtM
BbS.okacop062.info/PoSt/1120_438719.HtM
BbS.okacop063.info/PoSt/1120_269476.HtM
BbS.okacop065.info/PoSt/1120_419557.HtM
BbS.okacop066.info/PoSt/1120_469789.HtM
BbS.okacop067.info/PoSt/1120_123813.HtM
BbS.okacop068.info/PoSt/1120_927708.HtM
BbS.okacop069.info/PoSt/1120_702795.HtM
BbS.okacop070.info/PoSt/1120_765020.HtM
BbS.okacop060.info/PoSt/1120_297415.HtM
BbS.okacop061.info/PoSt/1120_802722.HtM
BbS.okacop062.info/PoSt/1120_273152.HtM
BbS.okacop063.info/PoSt/1120_381721.HtM
BbS.okacop065.info/PoSt/1120_834062.HtM
BbS.okacop066.info/PoSt/1120_318741.HtM
BbS.okacop067.info/PoSt/1120_088109.HtM
BbS.okacop068.info/PoSt/1120_860339.HtM
BbS.okacop069.info/PoSt/1120_083581.HtM
BbS.okacop070.info/PoSt/1120_784599.HtM
BbS.okacop060.info/PoSt/1120_350431.HtM
BbS.okacop061.info/PoSt/1120_228974.HtM
BbS.okacop062.info/PoSt/1120_586035.HtM
BbS.okacop063.info/PoSt/1120_081351.HtM
BbS.okacop065.info/PoSt/1120_607246.HtM
BbS.okacop066.info/PoSt/1120_971441.HtM
BbS.okacop067.info/PoSt/1120_523835.HtM
BbS.okacop068.info/PoSt/1120_659254.HtM
BbS.okacop069.info/PoSt/1120_290837.HtM
BbS.okacop070.info/PoSt/1120_919349.HtM
BbS.okacop060.info/PoSt/1120_719859.HtM
BbS.okacop061.info/PoSt/1120_442891.HtM
BbS.okacop062.info/PoSt/1120_179064.HtM
BbS.okacop063.info/PoSt/1120_706243.HtM
BbS.okacop065.info/PoSt/1120_628567.HtM
BbS.okacop066.info/PoSt/1120_677622.HtM
BbS.okacop067.info/PoSt/1120_054951.HtM
BbS.okacop068.info/PoSt/1120_129828.HtM
BbS.okacop069.info/PoSt/1120_758887.HtM
BbS.okacop070.info/PoSt/1120_732975.HtM
BbS.okacop071.info/PoSt/1120_078220.HtM
BbS.okacop072.info/PoSt/1120_082854.HtM
BbS.okacop073.info/PoSt/1120_342748.HtM
BbS.okacop074.info/PoSt/1120_421538.HtM
BbS.okacop075.info/PoSt/1120_607158.HtM
BbS.okacop076.info/PoSt/1120_433427.HtM
BbS.okacop077.info/PoSt/1120_001479.HtM
BbS.okacop078.info/PoSt/1120_448810.HtM
BbS.okacop079.info/PoSt/1120_461262.HtM
BbS.okacop080.info/PoSt/1120_703515.HtM

#牛客AI配图神器#

全部评论

相关推荐

挥毫自在:想白嫖你呢
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务