koahubjs发布0.09 新增钩子机制
添加钩子机制,控制器钩子和函数钩子
修复自动加载bug,实现除自动加载导出的default外,还能自动加载其他的方法

记koahubjs钩子开发过程

在使用koahubjs开发项目完成之后,总是需要另外增加一些插件功能,这种情况下改动项目代码,风险太大,所以钩子机制不可缺少。koahubjs将钩子加载到了内存中,原因是因为koahubjs框架并没有内置数据库,而且加载到内存中更加灵活。
钩子1
控制器钩子
执行某个http请求的时候,想要调用另外一个控制器的方法
钩子2
方法钩子
执行某个http请求的时候,想要调用某个公共的函数
直接上代码

//创建hook.class.js
// hooks 定义
// {
//     addOrder: [
//         ’/admin/index/index’
//     ]
// }

export default class {
    constructor() {
        this.hooks = {};
    }

    get() {
        return this.hooks;
    }

    add(name, action) {
        let add = true;
        for (let key in this.hooks) {
            if (name == key) {
                this.hooks[key].push(action);
                add = false;
            }
        }
        if (add) {
            this.hooks[name] = [action];
        }

        return this.get();
    }

    run(name) {
        for (let key in this.hooks) {
            if (name == key) {
                for (let path of this.hooks[key]) {
                    if (/\w+\(.*\)$/.test(path)) {
                        this.runFunction(path);
                    } else {
                        this.runController(path);
                    }
                }
            }
        }
    }

    runController(path) {
        let action = path.slice(path.lastIndexOf(’/’));
        path = path.slice(0, path.lastIndexOf(’/’));

        let include = false;
        for (let _key in koahub.controllers) {
            if (_key == path) {
                include = true;
                break;
            }
        }

        if (include) {
            let ctrl = koahub.controllers[path];
            let pros = Object.getOwnPropertyNames(ctrl.prototype).filter(function(value) {
                if (value == ’constructor’) {
                    return false;
                }
                return true;
            });

            let callFlag = true;
            for (let k in pros) {
                if (’/’ + pros[k] == action) {
                    Object.getPrototypeOf(new ctrl())[pros[k]].call(this);
                    callFlag = false;
                }
            }

            if (callFlag) {
                console.error(’Hook Not Found Method’);
            }
        } else {
            console.error(’Hook Not Found Controller’);
        }
    }

    runFunction(value) {
        eval(`koahub.utils.${value}`);
    }
}

  

钩子需要提前挂载到相应的节点上

//开始挂载
//controller钩子
koahub.hook.add(’hook1’, ’/admin/public/sendEmail’);
//function钩子
koahub.hook.add(’hook2’, ’tools.add(1,2)’);

//调用钩子
koahub.hook.run(’hook1’);
koahub.hook.run(’hook2’);

util方法
//util下的*.util.js会自动挂载到koahub.utils上
//util/tools.util.js
export function add(a, b) {
    console.log(a + b);
    return a + b;
}

export function dis(a, b) {
    console.log(a - b);
    return a - b;
}

  

KoaHub.js – 基于 Koa.js 平台的 Node.js web 快速开发框架
安装

npm install koahubjs --save

Star Github

https://github.com/einsqing/koahubjs
官网:http://js.koahub.com
wemall  开源微商城 ,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统
wemall地址:http://www.wemallshop.com

最新文章

  1. WPF程序在Windows 7下应用Windows 8主题
  2. SQL Server 2008通过LinkServer连接MySQL
  3. css居中完全指南(翻译)
  4. uva 10723 Cyborg Genes(LCS变形)
  5. Xamarin.Android开发实践(八)
  6. CentOS 6.6 中设置Terminal快捷键
  7. bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)
  8. leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)
  9. HTML5 Canvas核心技术—图形、动画与游戏开发.pdf4
  10. Java SAX Schema Validation
  11. Oracle EBS-SQL (BOM-6):检查物料失效但BOM中未失效的数据.sql
  12. js和循环依赖
  13. js实现url链接encode加密
  14. Myeclipse黑色主题配置
  15. windows 杀死进程
  16. Python3 使用pymysql链接MySQL数据库
  17. NodeJS基础教程
  18. 小丸工具箱FAQ
  19. django面试二
  20. kubernets之endpoints

热门文章

  1. Bootstrap相关的网站
  2. loadrunner controller:集合点策略
  3. jquery.validate.js之自定义表单验证规则
  4. SoapUI:使用Excel进行参数化
  5. CodeForces758A
  6. TypeScript入门指南(JavaScript的超集)
  7. 微信小程序教程(第一篇)
  8. [CSS3] 学习笔记-CSS动画特效
  9. LoadRunner 调用Dll完成加密解密
  10. 重写titleView