小程式之對HTTP請求的封裝
阿新 • • 發佈:2018-12-22
一般的進行資料請求
並且很多時候需要使用臨時變數儲存this指標。
/**
* 頁面的初始資料
*/
data: {
test: 1
},
/**
* 生命週期函式--監聽頁面載入
*/
onLoad: function (options) {
let _this = this;
wx.request({
url: 'http://localhost:8080/api/get_all',
method: 'GET',
success: function(res) {
console.log(res);
console. log(_this.data.test);
}
})
},
使用ES6的箭頭函式
可以避免出現this指標作用域的問題。
/**
* 頁面的初始資料
*/
data: {
test: 1
},
/**
* 生命週期函式--監聽頁面載入
*/
onLoad: function (options) {
wx.request({
url: 'http://localhost:8080/api/get_all',
method: 'GET',
success: (res) => {
console. log(res);
console.log(this.data.test);
}
})
},
開始封裝request請求
1. 提取一些固定的資料封裝為const物件,並用單獨的檔案進行儲存
const config = {
// 所有請求的公共部分
api_base_url: "http://localhost:8080/api"
// appkey
...
}
// 將config匯出
export {config}
推薦將檔案放置在專案的更目錄,檔名為:baseConfig.js
2. 封裝HTTP請求:
在專案更目錄新建一個工具目錄為utils,在裡面放置我們一些對http請求相關的檔案
/utils/http.js
// 這兒需要使用相對路徑
import {config} from "../baseConfig.js"
// 定義一個HTTP請求類
class HTTP{
request(params){
// 預設不傳遞method為get請求
if(!params.method){
params.method = "GET"
}
wx.request({
url: config.api_base_url+params.url,
data: params.data,
method: params.method,
header: {
'content-type': 'application/json'
},
success: (res) => {
// 將http請求返回的狀態碼(這個狀態碼是數字型別)獲取
let code = res.statusCode.toString()
// 如果是2開頭的狀態碼就是請求成功的,直接將資料返回給回撥函式
if(code.startsWith("2")){
params.success(res.data)
}else{
// 針對400開頭的錯誤處理
}
},
fail: (err) => {
// 請求失敗的處理 500開頭的錯誤
}
})
}
}
// 最後將HTTP 請求返回
export {HTTP}
3. 對請求出錯情況進行處理
如果我們要定製自己各種出錯情況,我們需要定義一個自己的錯誤碼,對使用者進行反饋。
在utils的目錄下新建一個檔案error.js, 專門定義我們自己的一些錯誤碼。
export const tips = {
1 : '出錯了', //預設的錯誤提示
1000: '發生了一個錯誤!',
1001: '路徑不存在',
1002: '資料不存在'
}
對http.js檔案進行修改
import {config} from "../config.js"
// 引入檔案
import {tips} from "./error.js"
class HTTP{
request(params){
if(!params.method){
params.method = "GET"
}
wx.request({
url: config.api_base_url+params.url,
data: params.data,
method: params.method,
header: {
'content-type': 'application/json'
},
success: (res) => {
let code = res.statusCode.toString()
if(code.startsWith("2")){
params.success(res.data)
}else{
// 在返回資料中獲取錯誤碼
let error_code = res.data.error_code
// 呼叫錯誤處理方法
this._error_status(error_code)
}
},
fail: (err) => {
this._error_status(1000)
}
})
}
// 定義錯誤請求方法 (方法前有下劃線為私有方法)
_error_status(error_code){
if(!error_code){
error_code = 1
}
wx.showToast({
title: tips[error_code],
icon: 'none',
duration: 2000
})
}
}
export {HTTP}
4. 定義個Model類,在次封裝將一個頁面的所有請求都在Model類中進行處理
在專案的根目錄新建一個model資料夾,用來存放model類
import {HTTP} from "../utils/http.js"
// 定義一個PageModle直接繼承HTTP類
class PageModel extends HTTP{
// 定義請求方法getAll,並且通過callback進行回撥,然後通過this直接呼叫父類的request方法
getAll(callback){
this.request({
url: 'user/list',
success: (res) => {
callback(res)
}
})
}
}
export {PageModel}
5. page頁面的使用封裝的方法
import {PageModel} from "../../models/pageModel.js"
let pageModel = new PageModel()
Page({
/**
* 頁面的初始資料
*/
data: {
},
/**
* 生命週期函式--監聽頁面載入
*/
onLoad: function (options) {
pageModel.getAll((res) => {
console.log(res)
// 對獲取的資料進行自己的處理
})
},
...
})