這些天團隊裏開始作小程序開發了,以前沒作過,都是第一次,第一次的感受你們都懂的。週末看了一下小程序項目的代碼,在網絡請求上發現了一些小問題,最終沒忍住想了點辦法把request封裝了一下。下面來看看吧。json
看項目代碼時發現了下面幾點問題:小程序
針對這些問題,首先在項目目錄裏新建了一個apis的目錄,把全部與API請求的東西都放在這個目錄裏,以下圖這樣。 後端
/**
* name: api.js
* description: request處理基礎類
* author: 徐磊
* date: 2018-5-19
*/
class request {
constructor() {
this._header = {}
}
/**
* 設置統一的異常處理
*/
setErrorHandler(handler) {
this._errorHandler = handler;
}
/**
* GET類型的網絡請求
*/
getRequest(url, data, header = this._header) {
return this.requestAll(url, data, header, 'GET')
}
/**
* DELETE類型的網絡請求
*/
deleteRequest(url, data, header = this._header) {
return this.requestAll(url, data, header, 'DELETE')
}
/**
* PUT類型的網絡請求
*/
putRequest(url, data, header = this._header) {
return this.requestAll(url, data, header, 'PUT')
}
/**
* POST類型的網絡請求
*/
postRequest(url, data, header = this._header) {
return this.requestAll(url, data, header, 'POST')
}
/**
* 網絡請求
*/
requestAll(url, data, header, method) {
return new Promise((resolve, reject) => {
wx.request({
url: url,
data: data,
header: header,
method: method,
success: (res => {
if (res.statusCode === 200) {
//200: 服務端業務處理正常結束
resolve(res)
} else {
//其它錯誤,提示用戶錯誤信息
if (this._errorHandler != null) {
//若是有統一的異常處理,就先調用統一異常處理函數對異常進行處理
this._errorHandler(res)
}
reject(res)
}
}),
fail: (res => {
if (this._errorHandler != null) {
this._errorHandler(res)
}
reject(res)
})
})
})
}
}
export default request
複製代碼
2. 新建一個agriknow類 在agriknow裏面作了如下幾件事:api
/**
* name: agriknow.js
* description: 農知匯服務器提供的服務
* author: 徐磊
* date: 2018-5-19
*/
import request from './request.js'
class agriknow {
constructor() {
this._baseUrl = 'https://apis.xxx.xxx.com/dev/apis/train/v1/'
this._defaultHeader = { 'data-tupe': 'application/json' }
this._request = new request
this._request.setErrorHandler(this.errorHander)
}
/**
* 統一的異常處理方法
*/
errorHander(res) {
console.error(res)
}
/**
* 查詢全部新聞列表
*/
getNews(page = 1, size = 10) {
let data = { page: page, size: size }
return this._request.getRequest(this._baseUrl + 'news/client', data).then(res => res.data)
}
/**
* 獲取全部課程
*/
getCourseList(page = 1, size = 10, key = null) {
let data = key != null ? { page: page, size: size, queryValue: key } : { page: page, size: size }
return this._request.getRequest(this._baseUrl + '/course/mobile', data).then(res => res.data)
}
}
export default agriknow
複製代碼
3. 函數的調用bash
import agriknow from './apis/agriknow.js'
App({
onLaunch: function () {
// 展現本地存儲能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
……
……
複製代碼
import agriknow from './apis/agriknow.js'
App({
onLaunch: function () {
// 展現本地存儲能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
……
……
},
agriknow:new agriknow()
})
複製代碼
const app = getApp();
Page({
data: {
courseData: [],
page: 1,
size: 10,
total: 0
},
onLoad: function () {
……
……
wx.startPullDownRefresh()
this.getdataList();
},
//查詢課程列表
getdataList() {
app.agriknow.getCourseList(this.data.page++, this.data.size, '')
.then(res => {
wx.stopPullDownRefresh()
let list = this.data.page > 2 ? this.data.courseData.concat(res.list) : res.list
this.setData({
courseData: list
})
})
.catch(res => {
wx.stopPullDownRefresh()
wx.showToast({
title: '出錯了!',
icon: 'none'
})
})
},
//下拉刷新
onPullDownRefresh() {
console.log("下拉刷新");
this.getdataList();
},
……
……
})
複製代碼
全部的東西大概就是這個樣子了,就這麼個意思,但願對你們有點用。服務器