一、前言
- 微信小程序基礎
- 熟悉
web
開發的朋友可能對axios
情有獨鍾。
wx.request
的二次封裝
api
的集中管理和使用
二、配置baseUrl
- 通常狀況下,項目中的
baseUrl
域名前綴、登陸的code
、用戶信息
等都是配置在app.js
中
//app.js
App({
onLaunch: function () {
wx.login({
success: res => {
if (res.code) {
this.globalData.loginCode = res.code // 獲取的code碼,以進一步換取用戶信息
// res: {
// code: "061Zltjh1sXj6s0z96hh1Z1njh1Zltj5"
// errMsg: "login:ok"
// }
} else {
console.log('登陸失敗!' + res.errMsg)
}
}
})
},
globalData: {
userInfo: null,
loginCode: null,
baseUrl: 'https://...'
}
})
複製代碼
三、封裝wx.request
- 在小程序目錄下創建
utils
文件夾,並在文件夾下建立request.js
文件
// request.js
const request = options => {
return new Promise((resolve, reject) => {
const { data, method } = options
if(data && method !== 'get') {
options.data = JSON.stringify(data)
}
wx.request({
header: { 'Content-Type': 'application/json' },
...options,
success: function(res) {
if(res.data.code === 2000) {
resolve(res.data)
} else {
reject(res.data)
}
},
fail: function(res) {
reject(res.data)
}
})
})
}
export default request
複製代碼
四、api
的集中管理和使用
- 在小程序目錄下創建
api
文件夾,並在文件夾下建立user.js
文件(文件名推薦按模塊命名)
- 用過
axios
的朋友接下來應該會感受很熟悉
// user.js
import request from '../utils/request.js'
// baseUrl也可拼接在request.js中,當有多個鑑權模塊,放在這裏更靈活
const baseUrl = getApp().globalData.baseUrl
export function apiLogin(data) {
return request({
url: `${baseUrl}/user/login`,
method: 'post',
data
})
}
export function apiGetUserInfo() {
return request({
url: `${baseUrl}/user/userInfo`,
method: 'get'
})
}
export function apiModifyUserPassword(data) {
return request({
url: `${baseUrl}/user/modifyPassword`,
method: 'put',
data
})
}
export function apiLogout() {
return request({
url: `${baseUrl}/user/logout`,
method: 'delete'
})
}
複製代碼
- 在頁面中使用
// pages/login/login.js
import { apiLogin } from '../../api/user.js'
Page({
onLoad: function (options) {
this.login()
},
login() {
apiLogin({
// api params
}).then(res => {
// handle success
}).catch(error => {
// handle error
})
}
})
複製代碼
五、尾言
- 因爲涉及到
ES6
語法,須要在本地設置中開啓ES6
轉ES5
- 小程序開發過程當中應注意
this
指向性問題。
- 感謝瀏覽,如有不足之處請指正,歡迎留言探討。