1.在util目錄下建立http.js文件
注意:只有在接口返回的code == CODE_SUCCESS的時候才會回調(diào)success
/**
* @auth ike
* @date 2018/9/6
* @desc 網(wǎng)絡(luò)請求工具
*/
var u = {};
//請求返回體模型
u.httpModel = {
code: 0,
datainfo: '',
sucinfo: '',
}
//請求方式
u.GET = 'GET'; //GET類型的請求
u.POST = 'POST'; //POST類型的請求
//請求狀態(tài)CODE
u.statusCode_success = 200; //開發(fā)者服務器返回的 HTTP 成功狀態(tài)碼
u.CODE_SUCCESS = 2000; //接口請求成功的CODE
u.CODE_TOKEN_TIMEOUT = 1015; //用戶token過期CODE
//服務器地址
// u.API_SERVICE = 'http://api.douban.com/v2/';
u.API_SERVICE = 'https://xaas-test.uma.com/';
/**
* 攔截器
*/
u.requestInterceptor = function (reqParams) {
//做請求前的攔截處理
return reqParams;
}
/**
* 請求返回統(tǒng)一處理
*
*/
u.handleResponse = function (result, reqParams) {
if (result.statusCode == u.statusCode_success) {
u.httpModel = result.data;
if (u.httpModel.code == u.CODE_SUCCESS) {
//接口成功返回
if (reqParams.success)
reqParams.success(u.httpModel.code);
} else if (u.httpModel.code == u.CODE_TOKEN_TIMEOUT) {
//token過期出來
} else {
//其他的code碼返回到頁面自行處理
if (u.httpModel.sucinfo == null || u.httpModel.sucinfo == '' || u.httpModel.sucinfo == undefined) {
var code;
if (u.httpModel.code == undefined) {
code = '未知';
} else {
code = u.httpModel.code;
}
result = {
data: {
sucinfo: u.httpModel.sucinfo,
}
}
}
wx.showToast({
icon: 'none',
title: u.httpModel.sucinfo,
duration: 3000,
})
if (reqParams.fail)
reqParams.fail(u.httpModel);
}
} else {
console.log('請求錯誤 : ' + '錯誤碼:' + result.statusCode + ' / ' + '錯誤信息:' + result.errMsg);
wx.showToast({
icon: 'none',
title: '請求失敗:' + result.statusCode,
duration: 3000,
})
}
}
/**
* 發(fā)送請求
*
* @param reqParams 請求封裝的參數(shù)
* @param requestType 什么類型的請求 GET POST
*/
u.request = function (reqParams, requestType) {
var method = u.POST;
if (requestType == u.GET) {
method = u.GET;
} else if (requestType == u.POST) {
method = u.POST;
}
console.log(u);
//打印請求地址
u.logRequestUrl(reqParams);
//判斷是否需要顯示loading
var isLoading = false;
if (reqParams.loading != null && reqParams.loading != '') {
isLoading = true;
wx.showLoading({
title: reqParams.loading,
})
}
wx.request({
url: u.API_SERVICE + reqParams.url,
data: reqParams.params,
header: {
'content-type': 'application/x-www-form-urlencoded'
},
method: method,
complete: function (msg) {
if (reqParams.complete)
reqParams.complete(msg);
},
success: function (result) {
//關(guān)閉loading
if (isLoading)
wx.hideLoading();
u.handleResponse(result, reqParams);
},
fail: function (e) {
//關(guān)閉loading
if (isLoading)
wx.hideLoading();
e = {
sucinfo: '請求失?。? + e.errMsg,
}
if (reqParams.fail)
reqParams.fail(e);
}
})
}
/**
* GET請求
*
* @param reqParams
* @desc 一般用于登錄等不攜帶token
*/
u.httpGet = function (reqParams) {
reqParams = u.requestInterceptor(reqParams);
u.request(reqParams, u.GET);
}
/**
* POST請求
*
* @param reqParams
* @desc 一般用于攜帶token
*/
u.httpPost = function (reqParams) {
reqParams = u.requestInterceptor(reqParams);
u.request(reqParams, u.POST);
}
/**
* 上傳文件
*
* @param reqParams
* @desc
*/
u.uploadFile = function (reqParams) {
//判斷是否需要顯示loading
var isLoading = false;
if (reqParams.loading != null && reqParams.loading != '') {
isLoading = true;
wx.showLoading({
title: reqParams.loading,
})
}
wx.uploadFile({
url: u.API_SERVICE + reqParams.url, //僅為示例,非真實的接口地址
filePath: reqParams.filePath,
name: reqParams.name,
formData: req.params,
complete: function (msg) {
reqParams.complete(msg);
},
success: function (result) {
//關(guān)閉loading
if (isLoading)
wx.hideLoading();
result.data = JSON.parse(result.data + '');
handleResponse(req, result);
},
fail: function (e) {
//關(guān)閉loading
if (isLoading)
wx.hideLoading();
e = {
sucinfo: '請求失?。? + e.errMsg,
}
reqParams.fail(e);
}
})
}
/**
* 打印請求地址
*/
u.logRequestUrl = function (requestParams) {
//顯示請求路徑
var url = '請求路徑: ' + u.API_SERVICE + requestParams.url;
var paramCount = u.objCount(requestParams.param);
if (paramCount > 0) {
url += '?';
}
var i = 0;
for (var item in requestParams.params) {//用javascript的for/in循環(huán)遍歷對象的屬性
if (i != (paramCount - 1)) {//不是最后一個才加上&
url += item + "=" + requestParams.params[item] + '&';
} else {
url += item + "=" + requestParams.params[item];
}
i++;
}
console.log(url);
}
/**
* 獲取對象、數(shù)組的長度、元素個數(shù)
*
* @param obj 要計算長度的元素,可以為object、array、string
*/
u.objCount = function (obj) {
var objType = typeof obj;
if (objType == "string") {
return obj.length;
} else if (objType == "object") {
var objLen = 0;
for (var i in obj) {
objLen++;
}
return objLen;
}
return false;
}
//拋出方法
module.exports = u;
2.在頁面的js中
//index.js
//獲取應用實例
const app = getApp()
const http = require('../../utils/http.js');
Page({
data: {
},
onLoad: function () {
http.httpPost({
loading: '查詢中...',
url: 'user/login',
params: {
mobile: '13675843980',
code: '1234',
},
complete: function (msg) {
},
success: function (result) {
console.log(result);
},
fail: function (e) {
}
})
console.log(http.API_SERVICE);
},
})