在小程序中应用抛出异样机制能让代码构造更加的简洁,缩小很多的逻辑判断,并且可能失去出错时的具体错误信息,可说是好处多多,明天

要说的就是在校友录小程序的js中抛出(throw)异样。js中能够抛出任何类型的异样,比方数字、字符串甚至布尔值,例如:

<script>    try {        throw 'error';        throw 123;        throw false;    }    catch (e) {        alert(e);    }</script>

当然,像大多数的面向对象语言中有内置的Exception类一样,js中也有内置的异样类: Error ,

/** * Notes: 利用异样解决类  * Date: 2020-09-05 04:00:00 * Version : CCMiniCloud Framework Ver 2.0.1  const appCode = require('./app_code.js');class AppError extends Error {    constructor(message, code = appCode.LOGIC) {      super(message);        this.name = 'AppError';        this.code = code;    }  }  module.exports = AppError;

咱们能够自定义异样类并继承Error基类:

错误代码定义:

 /** * Notes: 错误代码定义 * Ver : CCMiniCloud Framework 2.0.1  * Date: 2020-09-05 04:00:00 * Version : CCMiniCloud Framework Ver 2.0.1   */module.exports = {    SUCC: 200,    SVR: 500, //服务器谬误      LOGIC: 1600, //逻辑谬误     DATA: 1301, // 数据校验谬误     HEADER: 1302, // header 校验谬误      NOT_USER: 1303, // 用户不存在    USER_EXCEPTION: 1304, // 用户异样     MUST_LOGIN: 1305, //须要登录     USER_CHECK: 1306, //用户审核中        ADMIN_ERROR: 2001 //管理员谬误}  

在校友录小程序中利用:

    // 获得openid    const cloud = cloudBase.getCloud();    const wxContext = cloud.getWXContext();    let r = '';    try {        if (!util.isDefined(event.router)) {            console.error('Router Not Defined');            return handlerSvrErr();        }        r = event.router.toLowerCase();        // 路由不存在        if (!util.isDefined(router[r])) {            console.error('Router [' + r + '] Is Not Exist');            return handlerSvrErr();        }        let routerArr = router[r].split('@');        let controllerName = routerArr[0];        let actionName = routerArr[1];        let token = event.token || '';        let params = event.params;        console.log('');        console.log('');        let time = timeUtil.time('Y-M-D h:m:s');        console.log('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');        console.log('[' + time + '][Request][Route=' + r + '], Controller=[' + controllerName + '], Action=[' + actionName + '], Token=[' + token + '], ###IN DATA=\r\n', JSON.stringify(params, null, 4));        let openId = wxContext.OPENID;        if (!openId) {            console.error('OPENID is unfined');            if (config.TEST_MODE)                openId = config.TEST_TOKEN_ID;            else                return handlerSvrErr();        }        // 引入逻辑controller        controllerName = controllerName.toLowerCase().replace('controller', '').trim();        const ControllerClass = require('controller/' + controllerName + '_controller.js');        const controller = new ControllerClass(openId, params, r, token);        // 调用办法            let result = await controller[actionName]();        // 返回值解决        if (!result)            result = handlerSucc(r); // 无数据返回        else            result = handlerData(result, r); // 有数据返回        console.log('------');        time = timeUtil.time('Y-M-D h:m:s');        console.log('[' + time + '][Response][Route=' + r + '], ###OUT DATA=', result);        console.log('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++');        console.log('');        console.log('');        return result;    } catch (ex) {        const log = cloud.logger();        if (ex.name == 'AppError') {            log.warn({                router: r,                errCode: ex.code,                errMsg: ex.message            });            // 自定义error解决            return handlerAppErr(ex.message, ex.code);        } else {            console.log(ex);            log.error({                router: r,                errCode: ex.code,                errMsg: ex.message,                errStack: ex.stack            });            // 零碎error            return handlerSvrErr();        }    }