UniApp 统一的接口 myRequest 用于进行 HTTP 请求

本人小白做过:H5 小程序 ,都是用的着一套myRequest  的封装方式,我个人感觉很好用.

但是,如果后端的请求携带方式如果是 FormData() 的可能改起来比较麻烦,但是对于日常来说我感觉已经足够了,咱们话不多说,直接上代码!

详细代码如下:

// 后台服务器地址 判断是开发环境还是正式环境
export const DOMAIN_URL = process.env.NODE_ENV === 'development' ? 'http://172.16.101.182:8003' :
    'http://h5.myjd.lanjing/prod-api'; // 换为你这边的正式的开发地址

// 基础地址,使用后台服务器地址
export const BASE_URL = DOMAIN_URL;

// 自定义请求函数 myRequest
export const myRequest = (option) => {
    // console.log(option);
    return new Promise((resolve, reject) => {
        // 在页面上显示加载中
        uni.showLoading({
            title: '加载中',
            mask: true,
        });

        // 构建完整的请求地址
        let url = BASE_URL + option.url;

        // 检查是否有参数,如果有,添加查询字符串
        if (Object.keys(option.params || {}).length > 0) {
            const queryString = Object.entries(option.params).map(([key, value]) =>
                `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&");
            url += (url.includes('?') ? '&' : '?') + queryString;
        }

        // 发起uni.request请求
        uni.request({
            timeout: 3000,
            url: url,
            method: option.method || "GET",
            header: {
                // 设置请求头信息
                "token": uni.getStorageSync("token"),
                'Authorization': "Bearer " + uni.getStorageSync("token"),
            },
            data: option.data,
            success: (res) => {
                // console.log(res.data);
                // 隐藏加载中
                uni.hideLoading();
                // 停止下拉刷新
                uni.stopPullDownRefresh();

                // 处理请求成功的情况
                if (res.data.code == 401) {
                    // 处理特定的返回码
                }
                if (res.data.code == 200) {
                    resolve(res.data);
                }
                if (res.data.code == 500) {
                    const token = uni.getStorageSync("token");
                    console.log(Boolean(token));
                    if (Boolean(token)) {
                        // 处理特定的返回码
                    } else {
                        // 在500错误的情况下跳转到登录页
                        setTimeout(() => {
                            uni.switchTab({
                                url: "/pages/login/login"
                            });
                        }, 500);
                    }
                }
                if (res.data.code == 1020) {
                    // 在1020错误的情况下提示重新登录
                    uni.$u.toast('请重新登录');

                    // 刷新当前页面或跳转到登录页
                    uni.removeStorageSync('token');
                    uni.removeStorageSync('userInfo');
                    let pages = getCurrentPages();
                    let page = undefined;
                    if (pages[pages.length - 1].route == "pages/login/login") {
                        if (pages) {
                            page = pages[pages.length - 1];
                            page.onLoad(true);
                            page.onShow(true);
                        }
                    } else {
                        setTimeout(() => {
                            uni.switchTab({
                                url: "pages/login/login"
                            });
                        }, 1500);
                    }
                    return;
                }
                resolve(res.data);
            },
            fail: (err) => {
                // 隐藏加载中
                uni.hideLoading();
                // 在请求失败的情况下弹出提示
                uni.$u.toast('服务器请求失败'); // uview简洁写法,需要提前引入uview组件
                reject(err);
            }
        });
    });
};

下面是接口统一封装的方式:

// 引入封装的请求
import { myRequest } from "@/utils/request.js";
// data 是后端携带参数格式 application/json Json 格式
// params 是后端携带参数格式 x-www-form-urlencoded(默认请求方式) 字符串拼接
// 获取顶部导航列表
export function conferenceServiceListAPI(data) {
  return myRequest({
    url: "/xlkj-psb-web/conferenceService/pageList",
    method: "post",
    data,
  });
}

// 修改手机号
export const update_phoneAPI = (params) => {
  return myRequest({
    url: "/xlkj-psb-web/member/update_phone",
    method: "post",
    params,
  });
};

// 删除按钮
export const jobDeleteAPI = (id) => {
  return myRequest({
    url: `/xlkj-psb-web/job/delete/${id}`,
    method: "post",
  });
};

如有不对的地方,本人虚心请教,我是时长一年半的前端练习生,哈哈哈.

uniapp中封装请求API的方法可以参考以下步骤: 1. 首先,在项目中新建一个http.js文件,可以放在api文件夹下。在该文件中,可以导入接口的前缀地址,例如baseURL。然后,定义一个myRequest方法,该方法接收一个options参数,并返回一个Promise对象。在该方法中,可以使用uni.request方法发送请求,设置请求的url、method、data、header等参数。在请求成功时,可以关闭Loading,判断返回的数据是否符合预期,如果不符合则使用uni.showToast方法提示获取数据失败,如果符合则使用resolve方法返回数据。在请求失败时,可以使用reject方法返回错误信息。最后,记得在请求开始时显示Loading,请求结束时隐藏Loading。[1] 2. 接下来,在http文件夹下新建一个request.js文件。在该文件中,可以定义一个全局请求封装方法。首先,设置请求的基础地址,例如base_url。然后,根据请求方法或URL来判断是否添加请求头,例如根据method是否为"post"来设置header中的token和content-type。接着,使用uni.request方法发送请求,设置请求的url、method、header、data等参数。在请求成功时,根据返回的状态码进行相应的操作,例如判断Errcode是否为'0',如果是则使用resolve方法返回数据,如果不是则使用uni.clearStorageSync方法清除本地缓存,并使用uni.showToast方法提示获取失败,并跳转到登录页面。在请求失败时,使用reject方法返回错误信息。最后,记得在请求开始时显示Loading,请求结束时隐藏Loading。[2] 3. 最后,在main.js文件中,可以将封装的请求API导入并挂载到Vue的原型上,以便在页面中使用。首先,导入封装的请求API,例如api。然后,使用Vue.prototype将api挂载到Vue的原型上,这样在页面中就可以通过this.api来调用封装的请求方法。[3] 通过以上步骤,你就可以在uniapp中封装请求API,并在页面中使用了。在页面中,可以通过调用this.api的方法来发送请求,例如this.api.GetSceneData()。[1][2][3]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值