微信小程序簡易請求框架

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);
        
    },
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 或許是武俠小說看多了吧,我心中總是懷著一抹期望,希望像那些男主角一樣,有一天會突然擁有無與倫比的主角光環(huán),爆發(fā)...
    不在乎_dc44閱讀 164評論 0 0
  • 一: 江行洲 月下樓 妝鏡臺旁落滿愁 盈盈花淚收 二: 婉月遲 柳垂枝 花前月下影成只 半簾青絲癡 三: 思無邊 ...
    一只文盲閱讀 315評論 4 4

友情鏈接更多精彩內(nèi)容