function getHeader() { //header頭部 return { "Accept":"application/json", 'Content-Type': 'application/json; charset=utf-8', 'ACCESS_TOKEN': `${token}`, "WECHAT_ID":'1', }; }
[{ method: 'get', hasBody: false, }, { method: 'post', hasBody: true, }, { method: 'put', hasBody: true, }, { method: 'del', hasBody: false, }].map(i => { module.exports[i.method] = function(url, optOrData, opt) { var data; if (i.hasBody) { data = optOrData; } else { opt = optOrData; } var p = () => new Promise((resolve, reject) => { /*wx.showLoading();*/ //體驗效果去掉加載圈 uni.request({ url: urlHandler(url), //對傳入的uri進行前綴的添加, method: i.method.toUpperCase(), header: getHeader(), data: i.hasBody ? data : undefined, success: function(info = {}) { // wx.hideLoading(); successHandler(resolve, reject, info.data, opt); }, fail: function(info = {}) { uni.hideLoading(); errorHandler(reject, info.data, opt); } }); }); // 等登錄完畢后再執行 if (false) {//需要暫停執行接口的判斷,比如當執行登錄的時候,需要暫停接口的請求 return loginPromise.then(p).catch(p); } else { //繼續執行余下接口 return p(); } } });
function successHandler(resolve, reject, data = {}, opt = {}) { //成功的回調s if (data.code != 200 ) { //接口的攔截,如果接口返回 200以外 就執行 失敗的回調方法 return errorHandler(reject, data, opt); } if (opt.showSuccessToast) { wx.showToast({ title: data.msg || '成功', icon: 'success' }); } resolve(data); }
function errorHandler(reject, data = {}, opt = {}) { //失敗的回調 if(codeMessage[data.code]){ uni.showToast({ title: codeMessage[data.code], icon: 'none' }) }else if(data.msg){ uni.showToast({ title: data.msg, icon: 'none' }) } reject(data); }
const codeMessage = { 200: "服務器成功返回請求的數據。", 201: "新建或修改數據成功。", 202: "一個請求已經進入后台排隊(異步任務)。", 204: "刪除數據成功。", 400: "發出的請求有錯誤,服務器沒有進行新建或修改數據的操作。", 401: "用戶沒有權限(令牌、用戶名、密碼錯誤)。", 402: "要求付款。", 403: "用戶得到授權,但是訪問是被禁止的。", 404: "發出的請求針對的是不存在的記錄,服務器沒有進行操作。", 405: "不允許此方法。", 406: "請求的格式不可得。", 410: "請求的資源被永久刪除,且不會再得到的。", 422: "當創建一個對象時,發生一個驗證錯誤。", 500: "服務器繁忙,請稍后重試。", 502: "網關錯誤。", 503: "服務不可用,服務器暫時過載或維護。", };
針對於上方失敗的回調中,錯誤的端口號,進行比對