【ウィジェットtaroベストプラクティス】httpリクエストパッケージ(使いやすく、tokenを増やし、エラーログの記録とレポートを統一)
オリジナル記事、作者:stark、転載する場合は、出典を明記してください.https://shudong.wang/10231.html
みんなに構想を提供して、参考にすることができて、どんな問題が伝言を残すことができます
taro足場の後ろの文章はゆっくりともっとテクニックを説明します
https://github.com/wsdo/taro-...
なぜカプセル化するのか
私たちが小さなプログラムを開発するとき、httpリクエストをよく使います.もちろん公式にリクエストのインタフェースが提供されていますが、リクエストするたびにtokenが加わる可能性があります.リクエストするたびに加算されます.カプセル化しないと、かなり面倒になりますが、どうやってカプセル化しますか.
とくせい暴露get方法 曝露post法 postカスタムcontentType プロファイル を追加 token定義 判断状態を追加する、異常情報 を記録する.異常エラーlogErrorログ を追加統合ログレポートを追加 デザイン
外部露出インタフェースが必要:get post
パラメータ:url、転送されたデータ、リクエストヘッダ
これで便利に使えます
新しいapiを/service/で作成します.js
基本オプションメソッド
getメソッド
义齿
ContentTypeの異なるバックエンドフレームワークを追加すると、異なるリクエストヘッダが要求されます.
これでactionで使いやすくなります
判定状態を追加
コンフィギュレーション
異常エラーlogErrorログの追加
組み合わせて使用
最終バージョン
すべてのコード
starを手伝ってくれれば
https://github.com/wsdo/taro-...
プロジェクトディレクトリ
友達を作る
みんなに構想を提供して、参考にすることができて、どんな問題が伝言を残すことができます
taro足場の後ろの文章はゆっくりともっとテクニックを説明します
https://github.com/wsdo/taro-...
なぜカプセル化するのか
私たちが小さなプログラムを開発するとき、httpリクエストをよく使います.もちろん公式にリクエストのインタフェースが提供されていますが、リクエストするたびにtokenが加わる可能性があります.リクエストするたびに加算されます.カプセル化しないと、かなり面倒になりますが、どうやってカプセル化しますか.
とくせい
外部露出インタフェースが必要:get post
パラメータ:url、転送されたデータ、リクエストヘッダ
これで便利に使えます
新しいapiを/service/で作成します.js
基本オプションメソッド
baseOptions(params, method = 'GET') {
let { url, data } = params
let contentType = 'application/x-www-form-urlencoded'
contentType = params.contentType || contentType
const option = {
isShowLoading: false,
url: base + url,
data: data,
method: method,
header: { 'content-type': contentType, 'token': token }, // contentType , token
success(res) {
},
error(e) {
logError('api', ' ', e)
}
}
return Taro.request(option)
},
getメソッド
get(url, data = '') {
let option = { url, data }
return this.baseOptions(option)
},
义齿
ContentTypeの異なるバックエンドフレームワークを追加すると、異なるリクエストヘッダが要求されます.
post: function (url, data, contentType) {
let params = { url, data, contentType }
return this.baseOptions(params, 'POST')
}
これでactionで使いやすくなります
import api from '../service/api'
api.get('news/list', params)
判定状態を追加
export const HTTP_STATUS = {
SUCCESS: 200,
CLIENT_ERROR: 400,
AUTHENTICATE: 401,
FORBIDDEN: 403,
NOT_FOUND: 404,
SERVER_ERROR: 500,
BAD_GATEWAY: 502,
SERVICE_UNAVAILABLE: 503,
GATEWAY_TIMEOUT: 504
}
コンフィギュレーション
export const base = "https://api.github.com/repos/"
異常エラーlogErrorログの追加
export const logError = (name, action, info) => {
if (!info) {
info = 'empty'
}
try {
let deviceInfo = wx.getSystemInfoSync() // taro
var device = JSON.stringify(deviceInfo)
} catch (e) {
console.error('not support getSystemInfoSync api', err.message)
}
let time = formatTime(new Date())
console.error(time, name, action, info, device)
//
// if (typeof action !== 'object') {
// fundebug.notify(name, action, info)
// }
// fundebug.notifyError(info, { name, action, device, time })
if (typeof info === 'object') {
info = JSON.stringify(info)
}
組み合わせて使用
import { HTTP_STATUS } from '../const/status'
import { base } from './config'
import { logError } from '../utils'
baseOptions(params, method = 'GET') {
let { url, data } = params
// let token = getApp().globalData.token
// if (!token) login()
console.log('params', params)
let contentType = 'application/x-www-form-urlencoded'
contentType = params.contentType || contentType
const option = {
isShowLoading: false,
loadingText: ' ',
url: base + url,
data: data,
method: method,
header: { 'content-type': contentType, 'token': token },
success(res) {
if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
return logError('api', ' ')
} else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
return logError('api', ' ')
} else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
return logError('api', ' ')
} else if (res.statusCode === HTTP_STATUS.SUCCESS) {
return res.data
}
},
error(e) {
logError('api', ' ', e)
}
}
return Taro.request(option)
},
最終バージョン
import Taro from '@tarojs/taro'
import { HTTP_STATUS } from '../const/status'
import { base } from './config'
import { logError } from '../utils'
const token = ''
export default {
baseOptions(params, method = 'GET') {
let { url, data } = params
// let token = getApp().globalData.token
// if (!token) login()
console.log('params', params)
let contentType = 'application/x-www-form-urlencoded'
contentType = params.contentType || contentType
const option = {
isShowLoading: false,
loadingText: ' ',
url: base + url,
data: data,
method: method,
header: { 'content-type': contentType, 'token': token },
success(res) {
if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
return logError('api', ' ')
} else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
return logError('api', ' ')
} else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
return logError('api', ' ')
} else if (res.statusCode === HTTP_STATUS.SUCCESS) {
return res.data
}
},
error(e) {
logError('api', ' ', e)
}
}
return Taro.request(option)
},
get(url, data = '') {
let option = { url, data }
return this.baseOptions(option)
},
post: function (url, data, contentType) {
let params = { url, data, contentType }
return this.baseOptions(params, 'POST')
}
}
すべてのコード
starを手伝ってくれれば
https://github.com/wsdo/taro-...
プロジェクトディレクトリ
友達を作る