介绍
Heysoo 是一个底层基于 Koa 进行开发的轻量级 MVC 框架。它内置了一个 MVC 框架所需的元素,包括模型(M)、视图层(V)、控制器(C),以及路由,静态资源等等。在 Heysoo 框架中,我们通过配置来加载我们需要的功能,实现可插拔式的应用。我们相信,通过良好的配置及约定,能够构建出稳定有序的服务。
安装
npm install heysoo --save
Quick Start
通过 Heysoo 启动一个 web 服务十分简单。
const Heysoo = ;const app = ; app; appstart;
此时访问 localhost:86 即可。
深入配置
以下是一个典型的 Heysoo 项目的目录结构:
—— root ├── app // 应用主目录 | ├── controller | ├── service | ├── view | ├── model | ├── static | ├── routerjs // 路由配置 ├── node_modules ├── indexjs // 应用启动入口 ├── configjs // 应用配置文件 ├── packagejson
下面我们通过一步一步修改的方式完成以上所有功能的配置。
首先,编写一个简单的配置文件 config.js
:
moduleexports = host: 'localhost' port: 91 // 默认端口是86,此处修改为你自己的端口 folder: // 我们可以通过 folder 配置参数修改我们的应用目录及子模块目录名称 app: 'application' // 默认 app controller: 'c' // 默认 controller service: 's' // 默认 service model: 'm' // 默认 model view: 'v' // 默认 view static: 'p' // 默认 static
更详细的配置参见
配置
模块。
此时,我们的项目目录结构变成这样:
── root ├── application | ├── c | ├── s | ├── v | ├── m | ├── p | ├── sc | ├── routerjs ├── node_modules ├── indexjs ├── configjs
注意:所有的目录都不是必要的,在此示例中我们仅仅会拿 c(控制器) 这个目录来作介绍。
接着,编写路由配置文件 application/router.js
:
module { app;}
在这里,我们简单地将根路径指向 home 控制器对应的方法 index
,输出一句问候语。在 c 目录下添加我们的控制器文件 application/c/home.js
:
module { Controller { super; } { thisctxbody = 'Hello, Heysoo'; } return HomeController;}
启动我们的应用 node index.js
,访问 http://localhost:91
,将看到浏览器输出 Hello, Heysoo
。
依赖说明
Node
Heysoo 对 Node 版本最低要求是 7.6.0 +(为了使用最新的 async/await 特性)。 如果你的 Node 版本比较低,可以考虑通过 babel 进行 polyfill,参见 如何 polyfill?。
Node 最新 LTS 版本已经到了 8.11.1,后端语言不像浏览器,建议尽可能升级到比较新的版本并拥抱新的语言特性。
特性
可配置,可拆卸
Heysoo 最大的特点是所有的功能模块几乎都可以配置,可拆卸,是否使用可以完全由你自己决定,不需要的功能模块在应用启动时并不会加载。假设你将所有的功能模块禁用,那它就只是一个简单的增强版的 Koa,仅此而已。
站在巨人的肩膀上
Heysoo 并不是一个重新造轮子的 MVC 框架,我们的目标是尽可能地使用优秀的开源库来实现我们想要的功能。Heysoo 的基础功能是基于 Koa 实现的,在其基础上进行功能增强,而所有的这些功能都是可以拆卸的。
插件化
你可以通过 Heysoo 提供的插件机制来引入你自己实现的插件。例如如果你觉得 Heysoo 自带的数据库功能不是你想要的,你完全可以禁用它,之后引入你自己实现的数据库插件模块。
拥抱 ES2015 和 async/await
在 Node 环境下编写代码,我们没有理由不使用 ES2015,同时通过适当的配置(babel)我们就可以使用更加方便的 async/await 特性代替繁琐的 promise / generator / co 等。
详细文档
更详细的文档说明见: Heysoo
TODO
- CSRF 验证
- Session 插件
- Mock 插件
- HTTP Client 插件
- Master/Worker 模式