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=>{
	//异步操作完成
});
### 集成网易云音乐 SDK 或 API 的方法 在 `uni-app` 中集成网易云音乐的功能可以通过调用其官方提供的 RESTful API 来实现。以下是具体的方法和技术细节: #### 1. 注册并获取网易云音乐开放平台的 API Key 首先需要前往网易云音乐开放平台注册账号,并申请相应的权限以获得 API 密钥[^1]。此密钥用于身份验证,确保每次请求都合法。 #### 2. 使用 HTTP 请求库发起数据交互 由于 `uni-app` 支持多种前端技术栈(如 Vue3 和 TypeScript),可以选择合适的 HTTP 库来发送网络请求。推荐使用内置的 `uni.request()` 方法或者第三方库 Axios 进行封装处理。 下面展示一段通过 `uni.request()` 调取歌曲详情接口的例子: ```javascript // 获取指定ID的歌曲信息 export function getSongDetail(songId) { const url = 'http://localhost/api/song/detail'; // 替换为实际API地址 return new Promise((resolve, reject) => { uni.request({ url: `${url}?id=${songId}`, method: 'GET', header: { Authorization: 'Bearer YOUR_ACCESS_TOKEN' }, success(res) { resolve(res.data); }, fail(err) { reject(err); } }); }); } ``` #### 3. 利用 uni-app 提供的多媒体组件播放音频文件 当成功拉取到音源链接后,可以借助 `<audio>` 标签或更高级别的 `uni.createInnerAudioContext()` 接口完成媒体控制逻辑[^3]。例如设置自动循环、监听进度变化等功能均能轻松达成。 示例代码如下所示: ```html <template> <view class="player"> <!-- 显示当前正在播放曲目封面 --> <image :src="currentTrack.coverImgUrl"></image> <!-- 控制按钮组 --> <button @click="togglePlay">播放/暂停</button> <!-- 时间轴显示 --> <text>{{ currentTime }} / {{ duration }}</text> </view> </template> <script lang="ts"> import { defineComponent } from 'vue'; let innerAudioCtx; export default defineComponent({ data() { return { currentTrack: null, currentTime: '00:00', duration: '00:00' }; }, methods:{ togglePlay(){ if(innerAudioCtx.paused){ innerAudioCtx.play(); }else{ innerAudioCtx.pause(); } } }, mounted(){ this.currentTrack = {...some_track_data}; innerAudioCtx = uni.createInnerAudioContext(); innerAudioCtx.src = some_url; innerAudioCtx.onCanplay(() => { console.log('开始加载'); }); innerAudioCtx.onError((res)=>{ console.error(`错误码:${res.errCode}, 错误信息: ${res.errMsg}`); }); innerAudioCtx.onTimeUpdate(()=>{ let t = Math.floor(innerAudioCtx.currentTime), d = Math.floor(innerAudioCtx.duration); this.currentTime = formatSeconds(t); this.duration = formatSeconds(d); }) } }); function formatSeconds(value:number):string{...} // 自定义时间格式化函数省略 </script> ``` 以上实现了基本的在线试听体验,但需要注意版权保护等问题,在正式上线前务必确认是否有授权许可[^4]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值