本篇內容介紹了“js原生小程序怎么封裝請求優(yōu)雅地調用接口”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

成都創(chuàng)新互聯公司-專業(yè)網站定制、快速模板網站建設、高性價比新田網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式新田網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋新田地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
基于小程序原生request封裝Promise風格的請求
避免多級回調(回調地獄)
對于網絡請求錯誤統(tǒng)一處理分發(fā)
. ├── api │ ├── config.js // 相關請求的配置項,請求api等 │ ├── env.js // 環(huán)境配置 │ ├── request.js // 封裝主函數 │ ├── statusCode.js // 狀態(tài)碼 └── ...
// env.js
module.exports = {
ENV: 'production',
// ENV: 'test'
}// statusCode.js
// 配置一些常見的請求狀態(tài)碼
module.exports = {
SUCCESS: 200,
EXPIRE: 403
}// config.js
const { ENV } = require('./env')
let BASEURL
switch (ENV) {
case 'production':
BASEURL = ''
break
case 'test':
BASEURL = ''
break
default:
BASEURL = ''
break
}
module.exports = {
BASEURL,// 項目接口地址,支持多域名
}注意 64~68行是對token過期的處理,在調用登錄的時候, 檢查app.globalData中是否存在token,存在則不發(fā)起登錄請求,token過期清空token,那么下一次請求的時候就會 重新發(fā)起登錄請求從而會重新獲取到新的token
// 引入狀態(tài)碼statusCode
const statusCode = require('./statusCode')
// 定義請求路徑, BASEURL: 普通請求API; CBASEURL: 中臺API,不使用中臺可不引入CBASEURL
const { BASEURL } = require('./config')
// 定義默認參數
const defaultOptions = {
data: {},
ignoreToken: false,
form: false,
}
/**
* 發(fā)送請求
* @params
* method: <String> 請求方式: POST/GET
* url: <String> 請求路徑
* data: <Object> 請求參數
* ignoreToken: <Boolean> 是否忽略token驗證
* form: <Boolean> 是否使用formData請求
*/
function request (options) {
let _options = Object.assign(defaultOptions, options)
let { method, url, data, ignoreToken, form } = _options
const app = getApp()
// 設置請求頭
let header = {}
if (form) {
header = {
'content-type': 'application/x-www-form-urlencoded'
}
} else {
header = {
'content-type': 'application/json' //自定義請求頭信息
}
}
if (!ignoreToken) {
// 從全局變量中獲取token
let token = app.globalData.token
header.Authorization = `Bearer ${token}`
}
return new Promise((resolve, reject) => {
wx.request({
url: BASEURL + url,
data,
header,
method,
success: (res) => {
let { statusCode: code } = res
if (code === statusCode.SUCCESS) {
if (res.data.code !== 0) {
// 統(tǒng)一處理請求錯誤
showToast(res.data.errorMsg)
reject(res.data)
return
}
resolve(res.data)
} else if (code === statusCode.EXPIRE) {
app.globalData.token = ''
showToast(`登錄過期, 請重新刷新頁面`)
reject(res.data)
} else {
showToast(`請求錯誤${url}, CODE: ${code}`)
reject(res.data)
}
},
fail: (err) => {
console.log('%c err', 'color: red;font-weight: bold', err)
showToast(err.errMsg)
reject(err)
}
})
})
}
// 封裝toast函數
function showToast (title, icon='none', duration=2500, mask=false) {
wx.showToast({
title: title || '',
icon,
duration,
mask
});
}
function get (options) {
return request({
method: 'GET',
...options
})
}
function post (options) {
// url, data = {}, ignoreToken, form
return request({
method: 'POST',
...options
})
}
module.exports = {
request, get, post
}新建api文件(此處以訂單接口為例), 新建api/index.js(接口分發(fā)統(tǒng)一處理,防止接口寫到同一個文件下過于冗長)
目錄結構如下:
. ├── api │ ├── config.js // 相關請求的配置項,請求api等 │ ├── index.js // 統(tǒng)一處理入口 │ ├── order.js // 訂單接口 │ ├── request.js // 封裝主函數 │ ├── statusCode.js // 狀態(tài)碼 └── ...
// order.js
const request = require('./request')
module.exports = {
// data可以傳入 url, data, ignoreToken, form, cToken
apiName (data) {
let url = 'apiUrl'
return request.post({ url, data })
}
}const orderApi = require("./order")
module.exports = {
orderApi
}const { orderApi } = require('dir/path/api/index')
...
1. `Promise.then()`鏈式調用
func () {
orderApi.apiName(params).then(res => {
// do Something
}).catch(err => {
// do Something
})
}
2. `async/await` 調用
async func () {
try {
let res = await orderApi.apiName(params)
// do Something
} catch (err) {
// do Something
}
}| 參數 | 說明 | 數據類型 | 默認值 |
|---|---|---|---|
| url | 接口名 | String | '' |
| data | 請求體 | Object | {} |
| ignoreToken | 請求是否攜帶token | Boolean | false |
| form | 是否是表單請求 | Boolean | false |
“js原生小程序怎么封裝請求優(yōu)雅地調用接口”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯網站,小編將為大家輸出更多高質量的實用文章!
分享標題:js原生小程序怎么封裝請求優(yōu)雅地調用接口
當前地址:http://chinadenli.net/article30/jiihpo.html
成都網站建設公司_創(chuàng)新互聯,為您提供外貿建站、品牌網站建設、微信公眾號、虛擬主機、外貿網站建設、域名注冊
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯