如何在uniapp中封装request,像Vue Axios一样调用API接口

如何在uniapp中封装request,像Vue Axios一样调用API接口

vue axios请求示例

funname({ param: param_value }).then((res) => {
 	if (res.success) {
        /**
        * 成功后业务处理
        */
        console.log(res)
    } else {
         /**
        * 失败后业务处理
        */
        console.log(res)
    }
})

以上是在vue中使用axios封装的request请求,使用起来非常优雅,那么我们在uniapp中能不能将uni.request封装成这样使用呢,请继续往下看

uni.request封装实现步骤

1、新建项目XXX略过

2、在项目的任意目录(这里建议统一放在util文件夹)创建request.js

3、在request中编写以下代码,实现了请求头加token以及配合后端实现token过期能力

// 引入vue原型,以调用挂载在原型上的实例
import Vue from 'vue'
const vm = new Vue()

/* 开发 */
const baseUrl = 'http://127.0.0.1:8080/api/'

const request = (config) => {
	// 请求头加入authToken
	config.header = { authToken: vm.$commonUtil.cache('authToken', null) }
	
	// 处理 apiUrl
	config.url = baseUrl + config.url
	
	// 处理api请求参数
	if (!config.data) {
		config.data = {}
	}
	
	let promise = new Promise(function(resolve, reject) {
		uni.request(config).then(res => {
			// 异常
			if (res[0]) {
				reject({
					message: "网络超时"
				});
			} else {
				// token过期,清理前端缓存,便于任意页面发起重新登录
				if(res.data.code === 401) {
					uni.clearStorage()
				}
				// 返回后端数据
				resolve(res.data)
			}
		}).catch(error => {
			reject(error)
		})
	})
	return promise
}

export default request

解释:我们为了在js中调用vue原型实例中挂在的节点,故使用如下方式引入了vue原型

// 引入vue原型,以调用挂载在原型上的实例
import Vue from 'vue'
const vm = new Vue()

4、调用示例,为每个业务建立单独的api.js,在其中引入我们封装的request.js

import request from '@/util/request.js'

// 抖音视频去水印
export function getDouYin (data) {
	return request({
		method: "GET", // 请求方式
		url: '/miniPrograms/videoProcess', // 请求url
		data: data // 参数
	})
}

5、在具体画面中,引入建立的api

<template>
	<view class="content">
		<!-- 主体内容 -->
		<view class="func-body">
			<view class="content-group link-content">
				<uni-easyinput v-model="url" focus placeholder="在这里输入视频分享链接"></uni-easyinput>
				<view>
					<button style="height: 37px;line-height: 37px;margin-left: -1px;" type="primary" size="mini" @tap="extractVideo">提取</button>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	import { getDouYin } from '@/api/video.js'
	
	export default {
		data() {
			return {
				url: '',
				video_src: '',
				video_title: ''
			}
		},
		onReady: function(res) {
		},
		methods: {
			extractVideo() {
				getDouYin({ videoUrl: this.url }).then((res) => {
					console.log(res)
					if(res.success) {
						that.video_src = res.data.videoList[0]
						that.video_title = res.data.videoTitle
					} else {
						uni.hideLoading()
						that.$refs.toast.show({
							type: 'error',
							message: res.msg
						})
					}
				})
			}
		}
	}
</script>

总结:通过以上步骤,我们就可以在项目中像vue axios一样优雅的请求后端API了,我的小程序中就使用了这样的的封装方式,请大家参考
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,在Vue项目安装axios: ``` npm install axios --save ``` 然后,我们可以在src目录下创建一个utils目录,用于存放封装axios请求相关的工具类。 在utils目录下,新建一个http.js文件,用于封装axios请求。 ```js import axios from 'axios' // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_API, // api的base_url timeout: 5000 // 请求超时时间 }) // request拦截器 service.interceptors.request.use(config => { // Do something before request is sent // ... return config }, error => { // Do something with request error console.log(error) // for debug Promise.reject(error) }) // respone拦截器 service.interceptors.response.use( response => { const res = response.data // 判断请求状态码 if (res.code !== 200) { // 这里可以根据后端返回的状态码进行统一的错误处理 console.log(res.message) return Promise.reject('error') } else { return response.data } }, error => { console.log('err' + error) // for debug return Promise.reject(error) } ) export default service ``` 在这个文件我们封装了一个axios实例,并且设置了请求的超时时间,以及请求和响应的拦截器。 接下来,在utils目录下新建一个api.js文件,用于封装后端接口。 ```js import request from '@/utils/http' export function login(data) { return request({ url: '/login', method: 'post', data }) } export function getInfo(token) { return request({ url: '/user/info', method: 'get', params: { token } }) } export function logout() { return request({ url: '/logout', method: 'post' }) } ``` 在这个文件,我们可以根据后端接口的定义,封装对应的请求方法,其包括接口的URL、请求方法和请求参数。 最后,在Vue组件使用这些封装好的API接口: ```js import { login } from '@/utils/api' export default { name: 'login', methods: { handleLogin() { login(this.form).then(response => { // 这里可以根据后端返回的数据进行相应的处理 console.log(response) }).catch(error => { // 这里可以根据后端返回的错误信息进行相应的处理 console.log(error) }) } } } ``` 在这个例子,我们使用了login方法,在响应成功后,打印出了后端返回的数据。 通过这种方式,我们可以将后端接口进行统一的封装和管理,并且在Vue组件可以方便的调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值