koahub.js 0.09 发布,新增钩子机制
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
koahub.js 0.09 发布,新增钩子机制的更多相关文章
- smartjs 0.2发布 - 新增oop模块&AOP增强
SmartJS2.0发布,更新内容如下: 新增oop(klass,factory)模块: promiseEvent加入非阻塞模式noBlock: trigger加入属性监听; smartjs主模块优化 ...
- [转] js中的钩子机制(hook)
什么是钩子机制?使用钩子机制有什么好处? 钩子机制也叫hook机制,或者你可以把它理解成一种匹配机制,就是我们在代码中设置一些钩子,然后程序执行时自动去匹配这些钩子:这样做的好处就是提高了程序的执行效 ...
- KoaHub.js是基于 Koa.js 平台的 Node.js web 快速开发框架
koahubjs KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, A ...
- Node.js进阶篇-koa、钩子函数、websocket、嵌入式开发
代码地址如下:http://www.demodashi.com/demo/12932.html 一.简介 koa是由Express原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的We ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- .NET Core 3.0即将发布!
期待已久的.NET Core 3.0即将发布! .NET Core 3.0在.NET Conf上发布.大约还有9个多小时后,.NET Conf开始启动. 为期3天的大概日程安排如下: 第1天-9月23 ...
- hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档
相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...
- Backbone.js 0.9.2 中文解释
// Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely ...
- Redis的消息订阅及发布及事务机制
Redis的消息订阅及发布及事务机制 订阅发布 SUBSCRIBE PUBLISH 订阅消息队列及发布消息. # 首先要打开redis-cli shell窗口 一个用于消息发布 一个用于消息订阅 # ...
随机推荐
- Bootstrap入门(三)<p>标签的css样式
Bootstrap入门(三)<p>标签的css样式 前提:引入css文件,内容放在一个class为container的div中 <p>标签属性 1.“ text-left ...
- POJ1753 搜索
Flip Game Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on ...
- webpack基础入门
我相信,有不少的朋友对webpack都有或多或少的了解.网上也有了各种各样的文章,文章内作者也写出了不少自己对于webpack这个工具的理解.在我刚刚接触webpack的时候,老实说,网上大部分的文章 ...
- Linux下tomcat的安装与项目部署
最近在linux下安装了jdk,为了圆我以前的心愿,把tomcat也安装了,顺便部署个项目,也算是小又成就感 废话不说了,直接上过程 一.下载安装对应的jdk,并配置Java环境. 有关jdk的安装请 ...
- Ubuntu系统下搭建PPTP类型VPN环境
step1: 安装pptpd 很简单的命令:sudo apt-get install pptpd step2: 修改pptpd的配置 有三个文件需要修改: (1)修改/etc/pptpd.conf,添 ...
- AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)
1.https://developer.vuforia.com注册账号. 2.分别添加License Manager(连接钥匙),Target Manager(图片后台下载). 3.下载vuforia ...
- Android Studio中.9.png文件出错问题
昨天使用别人的.9.png图片放在自己的android studio工程下使用,出现如下错误: :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DA ...
- PHP 用session与gd库实现简单验证码生成与验证的类
验证码是为了防止机器灌水给网站带来污染以及增加服务器负担而出现的.目前大大小小的网站都有验证码.今天自己实现了一个简单的验证码类.说简单是因为没有加一些干扰的弧线等等,只是将文字旋转了一下.当然,因为 ...
- UE4中的单映射:TMap容器
一.TMap<T>是么 TMap<T>是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系.因此你可以通过键名来快速查找到值.此外,单映射要求每个键都是唯一的.类似 ...
- c# 读取app.config遇到生成X.config.config问题
string exePath = System.IO.Path.Combine(Environment.CurrentDirectory, "WindowsFormsApp.exe" ...