1. 什么是uniapp
Uniapp是由DCloud公司打造的基于Vue.js开发跨平台应用的框架,它可以将Vue.js代码直接编译生成iOS、Android、H5以及各种小程序等多个端的应用。由于uniapp的强大灵活和方便开发,所以被越来越多的开发者所使用。
2. uniapp请求封装
2.1 uni.request
uni.request是uniapp中用于发送HTTP请求的方法,其原型为:
uni.request(Object object)
该方法接收一个参数object,是一个Object类型,包括以下属性:
url: String类型,必选项,表示请求地址
data: Object/String/ArrayBuffer类型,可选项,表示请求参数数据
header: Object类型,表示请求头部
method: String类型,可选项,表示请求HTTP方法,默认为GET
dataType: String类型,可选项,表示请求的数据类型,默认为json
responseType: String类型,可选项,表示响应的数据类型,默认为text
sslVerify: Boolean类型,可选项,表示是否验证ssl证书,默认为true
complete: Function类型,可选项,表示请求完成时的回调函数
2.2 请求失败处理
在uniapp开发中,网络请求是不可避免的,对于请求而言,它也有可能会失败。为了保证用户体验,我们需要对请求失败进行相应的处理。
我们可以通过uni.request的complete属性来进行请求失败的处理:
uni.request({
url: 'https://www.example.com',
complete: function(res) {
if (res.statusCode !== 200) {
uni.showToast({
title: '请求失败',
icon: 'none'
})
}
}
})
在上面的代码中,我们为complete属性赋值了一个回调函数,当请求完成时,如果响应的状态码不为200(即请求失败),则通过uni.showToast方法向用户显示“请求失败”的提示信息。
2.3 请求封装
由于uni.request方法的书写过程比较繁琐,为了提高开发效率,可以将其进行封装。这里我们可以将uni.request方法封装为一个Promise类型的函数,方便我们进行异步编程。
下面是一个基于Promise封装的uni.request请求代码:
export default function request(options) {
return new Promise((resolve, reject) => {
uni.request({
...options,
success: (res) => {
resolve(res.data)
},
fail: (err) => {
reject(err)
}
})
})
}
在上面的代码中,我们将uni.request封装为一个Promise类型的函数,并使用ES6的解构赋值来进行配置参数传递,当请求成功时,将响应数据传递给resolve函数,当请求失败时,将错误信息传递给reject函数。
2.4 请求拦截器
在进行网络请求时,有时需要在请求头部中添加一些特定的信息,对于这种情况我们可以使用请求拦截器进行处理。
我们可以通过在封装的uni.request函数中添加请求拦截器来实现,在请求拦截器中添加请求头部信息。
以下是一个基于请求拦截器的封装请求代码:
import store from '@/store'
export default function request(options) {
// 添加请求拦截器
uni.addInterceptor('request', {
// 请求拦截函数
handler(config) {
// 获取Token参数
let token = store.state.token
// 添加请求头部信息
config.header.Authorization = `Bearer ${token}`
// 返回处理后的配置参数
return config
}
})
return new Promise((resolve, reject) => {
uni.request({
...options,
success: (res) => {
resolve(res.data)
},
fail: (err) => {
reject(err)
}
})
})
}
在上面的代码中,我们通过uni.addInterceptor添加了请求拦截器,并为请求拦截器指定了一个handler函数来处理请求头部信息。