0.1.8 • Published 7 years ago

mvcify v0.1.8

Weekly downloads
-
License
MIT
Repository
-
Last release
7 years ago

简单的MVC架构

该项目目前处于开发阶段.

特性

  • 基于express框架
  • 实现mvc分层
  • 使用annotation注释模式的路由
  • 使用annotation注入service(中间件)
  • 使用swig模板作为默认模板引擎
  • 支持SCSS处动态理样式表

使用npm安装

npm install mvcify

使用 yarn 安装

yarn add mvcify

快速开始

应用目录结构如下:

 project
  |
  |- apps                             # 应用目录
  |   |- front-end                    # 网站前端
  |   |   |- controllers              # 控制器
  |   |   |   |- index.js             # - index控制器
  |   |   |   |- user.js              # - user控制器
  |   |   |   `- ...
  |   |   |- services                 # 中间件目录
  |   |   |- assets                   # 静态资源目录
  |   |   |- views                    # 视图目录
  |   |   |- config.js                # 配置
  |   |   `- ...
  |   `- ...
  |- assets
  |- node_modules
  |- services
  |- config.js
  |- app.js
  |- package.json
  `- ...

应用入口文件

四行代码轻松启动你的web应用。

// app.js
const mvcify = require('mvcify');
const mvc = mvcify.create(__dirname);
mvc.setup({'front-end': '/'});
mvc.app.listen(8080);

应用与控制器上的annotation

程序定义了一些列的指令,作用于控制器的annotation内,轻松实现路由注册,这样 方便开发、路由与方法绑定及查询,具体指令有:

  • get('/path')
  • post('/path')
  • put('/path')
  • patch('/path')
  • delete('/path')
  • head('/path')
  • options('/path')
  • route("method1","method2", path="/path")

另外,annotation还支持使用下列指令注册中间件:

  • before("services目录下的中间件文件名")
  • after("services目录下的中间件文件名")

可以多次调用,表示注册多个service 值得注意的是:前一个指令依赖后一个指令是否调用next方法

HTTP方法指令优先级高于route指令,也就是说如果存在HTTP方法指令,则route中对应的的方法无效

// index.js
/**
 * 这里的route时必须的
 *
 * @route("/");
 * @before("serviceName");
 * @before("serviceName2");
 * @after("serviceName")
 */
class IndexController {
  constructor(app) {
    this.app = app;
  }

  /**
   * 通过before指令注册的service会在该方法前被执行;
   * 该方法执行了next,才会执行通过after注册的service
   * 
   * @get("/");
   * @before("serviceName");
   * @after("serviceName")
   */
  index (req, res, next) {
    console.log(__filename);

    res.render('index', {
      title: 'Mvcify',
      message: 'Hello world!'
    });
  }

  /**
   * route指令中由GET、POST、DELETE、UEF四个方法,其中UEF是不被支持的;
   * 另外,又使用了 get、post指令,route中的GET、POST方法则无效了。
   *
   * @route(["GET", 'post', "Delete", 'UEF']);
   * @get("/oo");
   * @post("/ii");
   */
  about(req, res) {
    res.send('sdnjcjkd');
  }
}

module.exports = IndexController;