uniapp的request封装及使用

本文介绍了一种在uni-app中实现网络请求的方法,通过创建一个通用的request函数简化请求过程,并利用拦截器处理统一的错误反馈及登录状态验证。

1.首先创建一个unit文件,然后创建request.js

// 服务器地址
const BASE_URL = '/api' // 代理的api或者后端地址

// 请求,参数{url:'', data:{}, method:'POST'}
export const request = (options) => {
	return new Promise((resolve, reject) => {
		console.log(options.url);
		uni.request({
			url: BASE_URL + options.url,
			method: options.method || 'GET',
			// header:{token: uni.getStorage('user') ? uni.getStorage('user').token : ''},
            // 后端需要的请求头
			header: {
				Authorization: uni.getStorageSync('token') ?
					`Bearer ${uni.getStorageSync('token')}` : '',
				Client: 'APP'
			},
			data: options.data || {},
			success: res => {
				const data = res.data
				if (data.code === 401) {
					uni.reLaunch({
						url: '/pages/login/login'
					})
					return
				}
				resolve(data)
			},
			fail: error => {
				uni.showToast({
					icon: 'error',
					title: '操作错误'
				})
				reject(error)
			}
		})
	})
}

2.在api文件中引用

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

/**
 * 接口
 * @param data  请求数据
 * @@return
 */
export const add = data => {
	return request({
		url: '接口',
		method: '请求方法',
		data 
	})
}

3.使用

import { getList } from '@/api/getList.js'

// 然后直接使用
methods: {
	/**获取数据*/
	init(){
		getList(this.paramas).then(res => {
			console.log(res)
		})
	},
}

<think>好的,我现在需要帮用户解决在UniApp中如何封装request请求的问题。用户已经提供了三个相关的引用资料,我需要结合这些资料来生成一个示例,并且确保回答结构清晰,符合用户的要求。 首先,我需要理解每个引用的内容。引用[1]提到在main.js中引入请求类并设置为全局属性,这样可以在整个应用中使用。引用[2]展示了UniApp原生的uni.request使用方法,包括URL、数据、请求头和成功回调。引用[3]则详细说明了封装请求需要携带三个参数:url、data和options,其中options可以控制是否返回原始数据或自定义提示。 接下来,我应该按照这些引用的步骤来构建示例。首先,创建一个Request类,处理基础的请求配置、拦截器和响应处理。然后,在main.js中引入这个类并挂载到uni对象上,方便全局调用。最后,在页面中使用封装好的方法,比如uni.$http.get或post。 需要注意的是,封装时要考虑请求拦截,比如添加加载动画或Token;响应拦截处理统一的状态码,比如401跳转登录;还要处理错误提示的全局控制,避免每个请求重复写提示代码。同时,options参数的设计可以让调用更灵活,比如是否需要原生返回数据或自定义错误提示。 可能遇到的问题是如何处理异步请求和错误捕获,确保在success和fail回调中正确传递结果。另外,保持代码的模块化,将请求封装独立成文件,便于维护。还要测试封装请求是否正常工作,比如拼接baseUrl,处理不同的options情况。 最后,生成相关问题时要围绕封装请求的细节,比如拦截器实现、不同封装方式的比较、Token管理和错误处理等,帮助用户深入理解。</think>### UniApp封装Request请求步骤示例 1. **创建Request类**(/api/request.js) ```javascript class Request { constructor(baseUrl = 'https://api.example.com') { this.baseUrl = baseUrl this.interceptors = { request: (config) => config, response: (res) => res } } // 核心请求方法 async request(url, data = {}, options = {}) { const finalUrl = `${this.baseUrl}${url}` const config = this.interceptors.request({ url: finalUrl, data, ...options }) return new Promise((resolve, reject) => { uni.request({ ...config, success: (res) => { const processedRes = this.interceptors.response(res) if (options.native) return resolve(processedRes) // 返回完整响应[^3] if (res.statusCode === 200) { resolve(res.data) } else { this._handleError(res, options.toast) reject(res) } }, fail: (err) => { this._handleError(err, options.toast) reject(err) } }) }) } // 错误处理方法 _handleError(error, showToast = true) { if (showToast) { uni.showToast({ title: error.errMsg || '请求失败', icon: 'none' }) } } // 快捷方法 get(url, data, options) { return this.request(url, data, { ...options, method: 'GET' }) } post(url, data, options) { return this.request(url, data, { ...options, method: 'POST' }) } } export default new Request() ``` 2. **全局挂载**(main.js) ```javascript import Request from './api/request.js' uni.$http = Request // 挂载到全局对象[^1] ``` 3. **页面调用示例** ```javascript // GET请求(带参数) uni.$http.get('/user', { id: 123 }) .then(data => console.log(data)) .catch(err => console.error(err)) // POST请求(自定义配置) uni.$http.post( '/login', { username: 'admin', password: '123' }, { toast: false, // 禁用自动提示 header: { 'X-Custom-Header': 'value' } } ) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值