uni-app封装api请求

前端封装api请求

前端封装 API 请求可以提高代码的可维护性和重用性,同时使得 API 调用更加简洁和易用。

下面是一种常见的前端封装 API 请求的方式:

  1. 创建一个 API 封装模块或类:可以使用 JavaScriptTypeScript 创建一个独立的模块或类来封装 API 请求。这个模块或类可以包含一些常用的方法,例如 getpost 等,用于发送不同类型的请求。

  2. 配置基本信息:在封装模块中,设置 API 的基本信息,例如 API 的根地址、请求头等。可以定义一些默认配置,也可以允许开发者在调用时传入自定义配置。

  3. 实现请求方法:根据需要,实现不同的请求方法,例如 getpostputdelete 等。这些方法通常接收参数(例如 URL、数据、请求头等),并返回一个 Promise 对象,以便在异步请求完成后获取数据或处理错误。

  4. 处理请求和响应拦截:在请求发送前,可以对请求进行一些预处理,例如添加统一的请求头、身份验证等。在响应返回后,也可以对响应进行拦截和处理,例如判断状态码、处理错误信息等。

  5. 错误处理:在封装的 API 模块中,可以统一处理请求错误。例如,对于网络错误或服务器返回的错误信息,可以进行统一的处理,并根据需要进行提示或记录操作。

  6. 使用封装的 API 模块:在项目中使用封装的 API 模块进行 API 请求。通过调用封装模块中的方法,传入请求所需的参数,即可发送请求并获取响应数据。

这种方式的好处是,在项目中可以复用封装好的 API 请求逻辑,减少代码的冗余,并且使得 API 调用的代码更加清晰和易读。

此外,对于底层的网络请求库,也可以根据需要进行切换和替换,而不需要修改大量的业务代码。

uni-app 封装api请求

在uni-app中封装API请求可以按照以下步骤进行:

  • 创建一个utils文件夹 ,并在其中创建一个api.js文件,用于存放API请求相关的代码。

  • api.js文件中,引入uni.request方法用于发送请求。示例代码如下:

javascript 复制代码
export function request(url, method, data) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: url,
      method: method,
      data: data,
      success: (res) => {
        resolve(res.data);
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}

这里使用了Promise对象来处理异步请求,方便后续的使用和处理。

  • api.js文件中,定义具体的API请求函数

示例代码如下:

javascript 复制代码
import { request } from './utils/api';

export function login(username, password) {
  const url = 'https://api.example.com/login';
  const method = 'POST';
  const data = {
    username: username,
    password: password
  };
  return request(url, method, data);
}

export function getUserInfo(userId) {
  const url = `https://api.example.com/users/${userId}`;
  const method = 'GET';
  return request(url, method);
}

以上示例代码中包括了登录和获取用户信息两个API请求函数。根据具体的需求,你可以进行修改或添加其他的API请求函数。

  • 在需要使用API的页面或组件中引入并调用定义的API请求函数即可

示例代码如下:

javascript 复制代码
import { login, getUserInfo } from './utils/api';

login('example', 'password').then((res) => {
  console.log('登录成功', res);
}).catch((err) => {
  console.error('登录失败', err);
});

getUserInfo(123).then((res) => {
  console.log('获取用户信息成功', res);
}).catch((err) => {
  console.error('获取用户信息失败', err);
});

以上示例代码展示了如何使用封装的API请求函数来进行登录和获取用户信息的操作。根据具体需求,你可以在相应的页面或组件中调用相关API请求函数。

通过以上步骤,你就可以在uni-app中封装API请求,使代码结构更加清晰和可维护。记得根据实际情况进行适当的错误处理和数据处理。

uni-app封装api请求改进

javascript 复制代码
// @/utils/request.js
// #ifdef MP-WEIXIN
const baseURL = "https://www.bradenhan.tech"
// #endif 
// #ifdef H5
const baseURL = ""
// #endif

const timeout = 5000

// 封装api请求
const request = function(option){ 
    // 获取用户传入的url
    var url = baseURL + option.url; 
     
    // 添加提请求头
    var  header = option.header||{}
    if(!!option.needToken){
        // 添加token 
        header.Authorization =  'Bearer ' +  uni.getStorageSync('token');  
    }
    header.source=1;
    header.channel="h5";
    
    // 加载提示
    var loading = option.loading;
    // 如果有loading就显示loading
    if(loading){
        uni.showLoading(loading)
    }
  
  // 返回一个promise
    return new Promise((resolve,reject)=>{  
        // 发起一个request请求
        uni.request({
            url, //请求url
            method:option.method||"GET", //请求方法
            header, //请求头
            timeout,
            data:option.data||option.params, //请求数据
            success(res){
                // 成功返回结果
                if(res.statusCode===200){
                    resolve(res.data)
                    // 如果是101 没有权限
                    if(res.data.code==101){
                        uni.showToast({
                            title: res.data.msg,
                            icon:'none'
                        })
                        uni.redirectTo({
                            url: '/pages/login/index',
                        })
                    }
                    if(res.data.code!=200&&res.data.code!=0){
                        uni.showToast({
                            icon:'none',
                            title:res.data.msg||'请求错误'
                        })
                    }
                } 
            },
            fail(err){
                // 失败返回失败结果
                uni.showToast({
                    title: '请求失败',
                    icon:'error'
                })
                console.error(err);
                reject(err)
            },
            complete(){
                // 完成 关闭loading
                if(loading){
                    uni.hideLoading()
                }
            }
        })
    })
}

// 定义get简洁方法
request.get=function(url,config){
    return  request({
        url,
        method:"GET",
        ...config
    })
}

// 定义post简洁方法
request.post=function(url,data,config){
    return  request({
        url,
        method:"POST",  
        ...config,
        data
    })
}
// 导出请求
export default request;

统一控制api.js

javascript 复制代码
request.post(url,data,needToken)

参数:

  • url 请求url

  • data 请求参数data

  • needToken 是否需要参数

javascript 复制代码
// @/api/index.js

import request from '@/utils/request.js' 

// 用户注册
export function customUseRegister(data){
    return request.post("/xxxx1",data)
}

// 微信用户登录
export function customUserLogin(data){
    return request.post("/xxxx2",data)
} 

// 更新用户信息 -- 需要使用Token
export function customUserUpdate(data){
    return request.post("/xxxx3",data,{needToken: true})
}

组件中使用

javascript 复制代码
import { customUserLogin, customUseRegister,customUserUpdate } from '@/api/index.js'

customUserUpdate(data).then((res) => {
  console.log('成功', res);  
}).catch((err) => { 
  console.error('登录失败', err);
});
相关推荐
耶啵奶膘4 小时前
uniapp+vue2全局监听退出小程序清除缓存
小程序·uni-app
我开心就好o11 小时前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
Random_index11 小时前
#Uniapp篇:支持纯血鸿蒙&发布&适配&UIUI
uni-app·harmonyos
初遇你时动了情18 小时前
uniapp 城市选择插件
开发语言·javascript·uni-app
小小黑00721 小时前
uniapp+vue3+ts H5端使用Quill富文本插件以及解决上传图片反显的问题
uni-app·vue
草字21 小时前
uniapp input限制输入负数,以及保留小数点两位.
java·前端·uni-app
前端小胡兔1 天前
uniapp rpx兼容平板
uni-app
荔枝吖1 天前
uniapp实现开发遇到过的问题(持续更新中....)
uni-app
艾小逗1 天前
uniapp将图片url转换成base64支持app和h5
uni-app·base64·imagetobase64
halo14161 天前
uni-app 界面TabBar中间大图标设置的两种方法
开发语言·javascript·uni-app