uni-app中调取接口的三种方式与封装uni.request()

本文详细介绍了uni-app中调用接口的三种方法:uni.request基础使用、Promise链式调用及async/await异步处理,同时分享了如何封装uni.request以简化API调用流程,提高代码复用性和维护性。

一、uni-app中调取接口的三种方式

1、uni.request({})
uni.request({
	url:'/api/getIndexCarousel.jsp',
	method:'get',
	success:res=>{
		console.log(res.data);
		this.carouselData = res.data
	}
})
2、uni.request({}).then()
uni.request({
	url:'/api/getIndexCarousel.jsp',
	method:'get',
}).then((result)=>{
	let [error,res] = result;
	//result将返回一个数组[error,{NativeData}]
	//NativeData:调取接口后返回的原生数据
	if(res.statusCode === 200){
		this.carouselData = res.data
	}
	if(res.statusCode === 404){
		console.log('请求的接口没有找到');
	}
})
3、async/await
async:用在函数定义的前面
async request(){	//函数体;}
await:用在标明了async关键字的函数内部,异步操作的前面。
onLoad() {
	this.request();
},
methods: {
	async request(){
		let result = await uni.request({
			url:'/api/getIndexCarousel.jsp'
		})
		console.log(result)
		let [err,res] = result;
		if(res.statusCode === 200){
			this.carouselData = res.data;
		}
	}
}

二、封装uni.request();

1、创建一个对象,将该对象挂在Vue的原型下

新建@/common/request.js文件

初步写法(仅供参考):

export default {
	request(options){
		uni.request({
			...options,
			success:res=>{
				console.log(res)
			}
		})
	},
	get(url,data={},options={}){
		options.url=url,
		options.data=data,
		options.method='get',
		this.request(options)
	},
	post(url,data={},options={}){
		options.url=url,
		options.data=data,
		options.method='post',
		this.request(options)
	}
}

二次更改:

export default{
	//封装uni.request():
	request(options){
		return new Promise((resolve,reject)=>{
			//书写异步操作的代码
			uni.request({
				...options,
				success:res=>{
					if(options.native){
						resolve(res)	//调取接口后返回的原生数据	
					}
					if(res.statusCode === 200){
						resolve(res.data)	//异步操作执行成功
					}else{
						console.log('请求的接口没有找到');
						reject(res) 	//异步操作执行失败
					}
				}
			})
		})
	},
	get(url,data={},options={}){
		options.url=url;
		options.data=data;
		options.method='get';
		return this.request(options)
	},
	post(url,data={},options={}){
		options.url=url;
		options.data=data;
		options.method='post';
		return this.request(options)
	}

}
2、进入main.js文件
import request from '@/common/request.js';
Vue.prototype.$Z = request;

例:在任意文件中书写下列代码可以调用。this.$Z.get();

3、在页面中调用
//封装uni.request():
this.$Z.get('/api/getIndexCarousel.jsp',{},{
	native:false
}).then(res=>{
	//异步操作成功
	console.log(res)
}).catch(res=>{
	//异步操作失败
	console.log(res)
}).finally(res=>{
	//异步操作完成
});
uni-app封装`uni.request`进行统一接口管理,可有效提高代码的可维护性和复用性。以下是具体的封装方法: ### 1. 确定接口地址 根据不同的环境(开发环境和线上环境)设置不同的接口地址。以下示例代码展示了如何根据环境变量设置接口地址: ```javascript // 确定接口地址 let URL = ""; if (process.env.NODE_ENV === "development") { // 本地环境 URL = "http://localhost:3000"; } else { // 线上环境 URL = "https://api.aslegou.top"; } // 按需导出地址 export { URL }; ``` ### 2. 创建封装文件 在项目根目录下创建`common`目录,在`common`中创建`request.js`文件,用于封装`uni.request`。以下是封装示例: ```javascript // 访问后端接口的域名或IP const Base_url = "http://127.0.0.1"; // 同时发送异步代码的次数,防止一次点击中有多次请求 let ajaxTimes = 0; export const myRequest = (options) => { return new Promise((resolve, reject) => { // 获取本地保存的token信息 let token = uni.getStorageSync('token'); uni.request({ url: Base_url + options.url, method: options.method || 'GET', data: options.data || {}, header: { 'Authorization': ['Bearer ', token].join('') }, success: (res) => { // 正常情况:处理接口数据 if (res.data.code === 401) { return uni.reLaunch({ url: '/pages/login/index' }); } if (res.data.code!== 200) { return uni.showToast({ title: res.data.msg }); } resolve(res.data); // 成功,将数据返回 }, fail: (err) => { // 异常情况 uni.showToast({ title: "请求接口失败!" }); reject(err); } }); }); }; ``` ### 3. 使用封装的请求方法 在需要使用接口的页面或组件中引入封装的请求方法,并调用。示例如下: ```javascript import { myRequest } from '@/common/request.js'; // 调用封装的请求方法 myRequest({ url: '/api/getData', method: 'POST', data: { key: 'value' } }).then(res => { console.log(res); }).catch(err => { console.error(err); }); ``` 通过以上步骤,可以在uni-app中实现对`uni.request`的封装和统一接口管理。在实际开发中,可根据项目需求对封装的方法进行扩展和优化,例如添加请求拦截器、响应拦截器等功能。 [^1][^3]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值