1. 前言
小程序的特点就是轻量、快速,但是这也带来了一些限制,例如HTTP请求不支持CORS、不支持websocket等等。因此,在小程序中封装请求成为了一个很有必要的事情。这篇文章旨在分享如何在原生小程序中进行请求封装,并实现优雅调用接口。
2. 封装请求
封装请求的主要目的就是让请求调用更加方便,同时保证代码的可扩展性。
2.1 封装GET请求
GET请求是一个基本的请求方式,我们可以将其封装成一个promise函数,示例代码如下:
/**
* 封装GET请求
* @param {string} url - 请求URL
* @param {object} data - 请求参数
* @returns {Promise}
*/
function getRequest(url, data) {
return new Promise((resolve, reject) => {
wx.request({
url: url,
data: data,
method: 'GET',
success: res => {
resolve(res.data)
},
fail: err => {
reject(err)
}
})
})
}
这样,在页面中发起GET请求时,只需要调用该函数即可,示例代码如下:
getRequest('https://api.example.com/data', { page: 1, size: 10 })
.then(data => {
console.log(data)
})
.catch(err => {
console.error(err)
})
2.2 封装POST请求
封装POST请求时,需要注意请求头的设置,示例代码如下:
/**
* 封装POST请求
* @param {string} url - 请求URL
* @param {object} data - 请求参数
* @returns {Promise}
*/
function postRequest(url, data) {
return new Promise((resolve, reject) => {
wx.request({
url: url,
data: data,
method: 'POST',
header: {
'content-type': 'application/json'
},
success: res => {
resolve(res.data)
},
fail: err => {
reject(err)
}
})
})
}
同样,在页面中发起POST请求时,只需要调用该函数即可,示例代码如下:
postRequest('https://api.example.com/user', { username: 'example', password: 'example123' })
.then(data => {
console.log(data)
})
.catch(err => {
console.error(err)
})
3. 优雅的调用接口
在实际开发中,除了简单的请求外,我们经常需要在不同的页面中调用同一个接口。此时,我们可以将接口封装成一个函数,并将其放在一个单独的文件中,这样就能够实现接口的复用。下面是一个示例:
3.1 定义接口函数
首先,在一个单独的JavaScript文件中,定义接口函数:
/**
* 获取用户信息接口
* @param {string} userId - 用户ID
* @returns {Promise}
*/
function getUserInfo(userId) {
return getRequest('https://api.example.com/user/' + userId, {})
}
module.exports = {
getUserInfo: getUserInfo
}
3.2 在页面中调用接口函数
然后,在需要调用接口的页面中,引入该文件,并调用接口函数:
const api = require('../../utils/api.js')
Page({
data: {
userId: '123'
},
onLoad() {
api.getUserInfo(this.data.userId)
.then(data => {
console.log(data)
})
.catch(err => {
console.error(err)
})
}
})
这样,我们就能够实现接口的复用,同时在页面中以一种优雅的方式调用接口。
4. 封装loading效果
在实际开发中,我们经常需要在页面中进行异步操作,这时可以使用loading效果来提示用户,示例代码如下:
4.1 定义showLoading函数
首先,我们定义一个showLoading函数,用来显示loading效果:
function showLoading() {
wx.showLoading({
title: '加载中'
})
}
4.2 定义hideLoading函数
接着,我们定义一个hideLoading函数,用来隐藏loading效果:
function hideLoading() {
wx.hideLoading()
}
4.3 在接口函数中使用showLoading和hideLoading函数
最后,在我们的接口函数中,使用showLoading和hideLoading函数来展示和隐藏loading效果,示例代码如下:
/**
* 获取用户信息接口
* @param {string} userId - 用户ID
* @returns {Promise}
*/
function getUserInfo(userId) {
showLoading()
return getRequest('https://api.example.com/user/' + userId, {})
.then(data => {
hideLoading()
return data
})
.catch(err => {
hideLoading()
throw err
})
}
这样,在调用接口时,loading效果就会自动显示和隐藏了。同时,在页面中进行异步操作时,也可以使用showLoading和hideLoading函数来提示用户。
5. 总结
本文介绍了如何在原生小程序中封装请求,并实现优雅地调用接口。在封装请求中,我们定义了getRequest和postRequest函数,用来封装GET和POST请求。在调用接口函数时,我们可以将其放在一个单独的文件中,实现接口的复用,并以一种优雅的方式调用接口。最后,我们介绍了如何在页面中使用loading效果来提示用户。这些封装技巧能够让我们的代码更加优雅、可读、可扩展。