uniapp封装请求

在uniapp中封装HTTP请求,通常我们会使用uni.request方法。uni.request是uni-app提供的一个网络请求API,可以用来发送各种类型的HTTP请求(GET、POST、PUT、DELETE等)。下面是如何在uniapp中封装一个通用的HTTP请求方法,以便于在项目的各个部分复用。

1. 创建请求方法

首先,你可以在项目的utils目录下创建一个http.js文件,用于封装HTTP请求。

复制代码
// utils/http.js
 
import store from '@/store' // 如果使用Vuex,引入store
 
const baseUrl = 'https://你的接口域名'; // 你的接口基础URL
 
function request(options) {
    const { url, method = 'GET', data = {}, headers = {} } = options;
    return new Promise((resolve, reject) => {
        uni.request({
            url: baseUrl + url,
            method,
            data,
            header: {
                ...headers,
                'content-type': 'application/json' // 根据需要设置内容类型
            },
            success: (res) => {
                if (res.statusCode === 200) {
                    resolve(res.data); // 成功时返回数据
                } else {
                    reject(res); // 失败时返回错误信息
                }
            },
            fail: (error) => {
                reject(error); // 请求失败时返回错误信息
            }
        });
    });
}
 
export default request;

2. 使用拦截器(可选)

为了增强请求的灵活性,比如添加统一的请求头、处理登录状态、错误提示等,你可以添加请求拦截器和响应拦截器。例如:

复制代码
// utils/http.js (修改后的版本)
import store from '@/store'; // 引入store,如果使用Vuex的话
 
const baseUrl = 'https://你的接口域名'; // 你的接口基础URL
const tokenKey = 'your_token_key'; // 假设token存储在这个key中,根据实际情况修改
 
function request(options) {
    const { url, method = 'GET', data = {}, headers = {} } = options;
    const token = uni.getStorageSync(tokenKey); // 获取token,根据实际情况调整获取方式
    const defaultHeaders = {
        'Authorization': token ? `Bearer ${token}` : '', // 如果存在token,则添加到请求头中
        'content-type': 'application/json' // 根据需要设置内容类型
    };
    return new Promise((resolve, reject) => {
        uni.request({
            url: baseUrl + url,
            method,
            data,
            header: { ...defaultHeaders, ...headers }, // 使用展开运算符合并默认头和自定义头
            success: (res) => {
                if (res.statusCode === 200) {
                    resolve(res.data); // 成功时返回数据
                } else if (res.statusCode === 401) { // 例如,处理401未授权错误,可能需要重新登录等操作
                    // 可以根据实际情况处理,例如跳转到登录页面等
                    reject(new Error('Unauthorized')); // 或者其他错误处理逻辑
                } else {
                    reject(res); // 其他错误情况返回错误信息
                }
            },
            fail: (error) => {
                reject(error); // 请求失败时返回错误信息
            }
        });
    });
}

3. 在项目中调用封装的方法

现在你可以在项目的其他部分通过引入http.js来使用封装的request方法了。例如:

复制代码
import request from '@/utils/http'; // 引入封装的方法
 
export default {
    methods: {
        fetchData() {
            request({ url: '/api/data', method: 'GET' })
                .then(data => {
                    console.log(data); // 处理返回的数据
                })
                .catch(error => {
                    console.error(error); // 处理错误情况
                });
        }
    }
}

这样,你就可以在uniapp中方便地使用封装好的HTTP请求方法了。

相关推荐
2501_915106323 分钟前
HTTPS 爬虫实战指南 从握手原理到反爬应对与流量抓包分析
爬虫·网络协议·ios·小程序·https·uni-app·iphone
2501_916007473 分钟前
iOS 上架技术支持全流程解析,从签名配置到使用 开心上架 的实战经验分享
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_9160074716 小时前
提升 iOS 26 系统流畅度的实战指南,多工具组合监控
android·macos·ios·小程序·uni-app·cocoa·iphone
砺能18 小时前
uniapp生成的app添加操作日志
前端·uni-app
2501_9159214321 小时前
iOS 应用代上架流程,多工具组合与使用 开心上架 跨平台自动化上传指南
android·ios·小程序·uni-app·自动化·cocoa·iphone
知识分享小能手1 天前
uni-app 入门学习教程,从入门到精通,uni-app组件 —— 知识点详解与实战案例(4)
前端·javascript·学习·微信小程序·小程序·前端框架·uni-app
雪芽蓝域zzs1 天前
uniapp 修改android包名
android·uni-app
芒果沙冰哟1 天前
uniapp canvas实现手写签字功能(包括重签,撤回等按钮)
uni-app
爱折腾的小码农1 天前
uni-app 小程序开发避坑:诡异的 `module ‘...‘ is not defined` 错误与我的解决方案
uni-app
Q_Q19632884751 天前
python+uniapp基于微信小程序的助眠小程序
spring boot·python·小程序·django·flask·uni-app·node.js