【微信小程序】uniapp版request的简单封装 get post和文件上传

封装了错误的提示,超时返回首页等,同时比较简洁,应该能满足大部分需求。

const baseUrl = 'http://XXXX'

function request(method, url, data = {}, header = {}) {
    if (!hasTokenOrIsLogin(url)) return; // 如果没有token或未登录,不发送请求
    return new Promise((resolve, reject) => {
        showLoading(); // 显示加载动画
        uni.request({
            url: baseUrl + url,
            data,
            method: method,
            header: {
                Authorization: uni.getStorageSync('token'), // 添加token到请求头
                ...header
            },
            success: (res) => handleSuccess(res, resolve, reject), // 请求成功处理
            fail: (err) => handleError(err, reject) // 请求失败处理
        })
    })
}

function showLoading() {
    uni.showLoading({
        title: '加载中'
    })
}

function hideLoading() {
    uni.hideLoading()
}

function hasTokenOrIsLogin(url) {
    // 已有token,或者当前是登录接口
    return uni.getStorageSync('token') || url === '/auth/login'; // TODO 改成你的登录接口
}

function handleSuccess(response, resolve, reject) {
    hideLoading(); // 隐藏加载动画
    const {
        statusCode,
        data: resData
    } = response;
    const {
        code,
        data: innerData,
        msg
    } = resData;

    if (statusCode === 200 && code === 200) {
        resolve(innerData); // 成功时返回数据
    } else if (code === 401) {
        handleUnauthorizedAccess(); // 处理未授权访问
        reject(msg);
    } else {
        showErrorMessage(msg); // 提示错误信息
        reject(msg);
    }
}

function handleError(error, reject) {
    hideLoading(); // 隐藏加载动画
    console.error(error);
    reject();
}

function handleUnauthorizedAccess() {
    uni.clearStorage(); // 清除本地存储
    uni.reLaunch({
        url: '/pages/home/home' // 重启小程序并返回到首页
    });
}

function showErrorMessage(msg) {
    uni.showToast({
        title: msg,
        icon: "none",
        duration: 2000
    })
}

export default {
    get(url, data, header) {
        return request('GET', url, data, header);
    },
    post(url, data, header) {
        return request('POST', url, data, header);
    }
}

更新:

新增文件上传,兼容h5和微信小程序

function uploadFile(url, filePath, formData, header = {}) {
	if (!hasTokenOrIsLogin(url)) {
		handleUnauthorizedAccess()
		return
	}; // 如果没有token或未登录,不发送请求
	return new Promise((resolve, reject) => {
		showLoading(); // 显示加载动画
		uni.uploadFile({
			url: baseUrl + url,
			filePath,
			formData,
			name: 'file',
			header: {
				Authorization: uni.getStorageSync('token'), // 添加token到请求头
				...header
			},
			success: (res) => handleSuccess(res, resolve, reject), // 请求成功处理
			fail: (err) => handleError(err, reject) // 请求失败处理
		});
	})
}

使用:

filePath传入uni.chooseImage获取到的res.tempFilePaths[0]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值