微信小程序简易请求框架

1.在util目录下建立http.js文件
注意:只有在接口返回的code == CODE_SUCCESS的时候才会回调success

/**
 * @auth ike
 * @date 2018/9/6
 * @desc 网络请求工具
 */

var u = {};

//请求返回体模型
u.httpModel = {
    code: 0,
    datainfo: '',
    sucinfo: '',
}

//请求方式
u.GET = 'GET';      //GET类型的请求
u.POST = 'POST';    //POST类型的请求

//请求状态CODE
u.statusCode_success = 200;             //开发者服务器返回的 HTTP 成功状态码
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;
}

/**
 * 请求返回统一处理
 * 
 */
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,
        })
    }
}


/**
 * 发送请求
 * 
 * @param reqParams     请求封装的参数
 * @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) {
            //关闭loading
            if (isLoading)
                wx.hideLoading();

            u.handleResponse(result, reqParams);
        },
        fail: function (e) {
            //关闭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) {
            //关闭loading
            if (isLoading)
                wx.hideLoading();
            result.data = JSON.parse(result.data + '');
            handleResponse(req, result);
        },
        fail: function (e) {
            //关闭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循环遍历对象的属性 
        if (i != (paramCount - 1)) {//不是最后一个才加上&
            url += item + "=" + requestParams.params[item] + '&';
        } else {
            url += item + "=" + requestParams.params[item];
        }

        i++;
    }
    console.log(url);
}

/**
 * 获取对象、数组的长度、元素个数
 * 
 * @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);
        
    },
})

你可能感兴趣的:(微信小程序简易请求框架)