rename apiHow to apiTodo

This commit is contained in:
陆柯 2021-07-08 13:33:09 +08:00
parent e067e8f0f6
commit dbecb6049b

View File

@ -11,6 +11,7 @@
import './ican-H5Api.js' // 对齐H5Api: https://ext.dcloud.net.cn/plugin?id=415 // 注意要取消默认自带的 showToast https://uniapp.dcloud.io/api/system/clipboard?id=%e6%b3%a8%e6%84%8f
module.exports = {
// 用直观的色彩,代替 uview 的命名方式:
RED: 'error',
GREEN: 'success',
BLUE: 'primary',
@ -19,8 +20,7 @@ module.exports = {
BLACK_TOAST: 'default',
WHITE_BUTTON: 'default',
BACKEND: 'SERVER',
// 快速输出详尽提示,可用来取代 console.log
clog(...message) {
console.log(
'【【【【【【【【【【',
@ -30,6 +30,7 @@ module.exports = {
)
},
// 再次封装 uni.request输入参数和 uni.request 保持基本一致。主要为了插入 _passtoken简化 url 的组装,以及输出提示。
async request({ method = 'POST', url, header = {}, data = {} }) {
url = this.makeUrl(url)
header._passtoken = uni.getStorageSync('_passtoken')
@ -46,51 +47,60 @@ module.exports = {
return [error, response]
},
async callBackend({ backend = this.BACKEND, method = 'POST', apiVersion = 'api', apiWho, apiHow, apiWhat = {} }) {
console.log('👇 < BackendRequest > ', { apiWho, apiHow, apiWhat }, ' < /BackendRequest > 👇')
BACKEND: 'SERVER', // 通过变量来动态切换后台类型:服务器 SERVER或云服务 CLOUD
/** uni.request uniCloud.callFunction
* 返回值{ _state, 成功结果或错误结果 }其中 _state 除了后台返回的还可以是
* - CLIENT_BACKEND_BROKEN: 前端发现后台断线
* - CLIENT_BACKEND_TIMEOUT: 前端发现后台超时
* - CLINET_BACKEND_EXCEPTION: 前端发现后台异常
**/
async callBackend({ backend = this.BACKEND, httpMethod = 'POST', apiVersion = 'api', apiWho, apiTodo, apiWhat = {} }) {
console.log('👇 < BackendRequest > ', { apiWho, apiTodo, apiWhat }, ' < /BackendRequest > 👇')
let result = {}
if (backend === 'CLOUD') {
let { /* success, header, requestedId, */ result: resultCloud = {} } = await uniCloud
.callFunction({
name: apiWho,
data: {
apiHow,
apiTodo,
apiWhat,
_passtoken: uni.getStorageSync('_passtoken'),
// uniIdToken // uniCloud自动getStorageSync('uni_id_token')并传递为 uniIdToken也可自行传入 uniIdToken
// uniIdToken // uniCloud自动getStorageSync('uni_id_token')并传递为 uniIdToken也可自行组装传入 uniIdToken
},
})
.catch((exp) => {
// 断网或云端返回异常 {errMsg, stack} = error
if (/request:fail/.test(exp.errMsg)) {
.catch((error) => { // {errMsg, stack} = error
if (/request:fail/.test(error.errMsg)) {
// 后台云服务无法连接
return { result: { _state: 'CLIENT_BACKEND_BROKEN' } }
} else {
return { result: { _state: 'CLIENT_BACKEND_EXCEPTION' } }
// 后台云服务返回异常
return { result: { _state: 'CLIENT_BACKEND_EXCEPTION', error } }
}
})
result = resultCloud
} else {
if (method === 'GET') {
if (httpMethod === 'GET') {
// 如果不是 POST 方法,要额外把参数JSON化
for (let key in apiWhat) {
apiWhat[key] = JSON.stringify(apiWhat[key])
}
}
let [error, { data: resultServer = {}, statusCode, header, errMsg } = {}] = await uni.request({
method,
url: this.makeUrl(`${apiVersion}/${apiWho}/${apiHow}`),
let [error, { statusCode, header, errMsg, data: resultServer = {} } = {}] = await uni.request({
method: httpMethod,
url: this.makeUrl(`${apiVersion}/${apiWho}/${apiTodo}`),
header: { _passtoken: uni.getStorageSync('_passtoken') },
data: apiWhat,
})
if (error) {
if (error.errMsg === 'request:fail') {
// 后台断线
// 后台服务器无法连接
result = { _state: 'CLIENT_BACKEND_BROKEN' }
} else if (error.errMsg === 'request:fail timeout') {
// 后台异常而超时返回
// 后台服务器超时
result = { _state: 'CLIENT_BACKEND_TIMEOUT' }
} else {
result = { _state: 'CLIENT_BACKEND_EXCEPTION' }
// 后台服务器返回异常
result = { _state: 'CLIENT_BACKEND_EXCEPTION', error }
}
} else {
result = resultServer