当前位置:   article > 正文

从0到100:基于微信小程序的羽毛球馆预约系统的开发笔记_ccminicloud

ccminicloud

背景

羽毛球馆预订小程序,是一款专门为羽毛球馆从业者设计的小程序平台, 包括本店动态,运动常识,场地预约等功能。 可以随时查看当天场地的预约数量,随时掌握自己场地的经营情况。 对于羽毛球爱好者来说,可以实时查看场地数据,一目了然查看还有多少场地可以预定, 按自己的时段安排来合理打球时间。

该系统基于MVC架构,采用基于微信小程序平台开发 无需下载安装APP。

功能在这里插入图片描述

数据库

在这里插入图片描述

技术难点

在小程序中使用抛出异常机制能让代码结构更加的简洁,减少很多的逻辑判断,并且能够得到出错时的详细错误信息,可说是好处多多,今天

要说的就是在小程序的js中抛出(throw)异常。js中可以抛出任何类型的异常,比如数字、字符串甚至布尔值,例如:

<script>
    try {
        throw 'error';
        throw 123;
        throw false;
    }
    catch (e) {
        alert(e);
    }
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

我们可以自定义异常类并继承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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

错误代码定义:

/**
 * 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 //管理员错误
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

小程序中应用:

// 取得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();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92

UI设计

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

后台界面设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Git开源地址

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/147199
推荐阅读
相关标签
  

闽ICP备14008679号