## qunar node 开发解决方案

让你只专注在业务和展现

* [模块](#modules)
    * [q-version (qzz版本号管理)](#qversion)
    * [q-template (模板系统)](#qtemplate)
    * [q-logger (日志系统)](#qlogger)
    * [q-exception (异常捕获)](#qexception)
    * [q-healthcheck](#qhealthcheck)
    * [q-monitor (监控系统)](#qmonitor)
    * [q-multiprocess (多进程管理)](#qmultiprocess)

## 包含模块

<a name="qversion"></a>
### qzz版本号 q-version
---
使用

    var qversion = require('@qnpm/q-version');
    // 初始化版本号
    qversion.parse(path.join(__dirname, 'refs')); // 参数为ver目录所在路径

<a name="qtemplate"></a>
### 模板 q-template
---
使用

    var qtemplate = require('@qnpm/q-template');

    // 设置模板引擎
    qtemplate(app, {
      views: __dirname + "/views", // 总模板目录
      layouts: 'layouts', // layout模板目录，默认views/layouts
      versions: qversion.versions()
    });

[模板使用详尽说明及接口](qtemplate)

<a name="qlogger"></a>
### 日志 q-logger

日志组件支持多进程工程，由主进程统一负责记录日志，支持不同的路由记录不同的日志文件，配置如下：

    {
        logFiles: [
            {
                type: 'track', // 名称
                route: ['/track.htm', '/timetrack.htm'], // 路由，支持express风格路由
                appenders: [ // log4js appenders配置
                    {
                        "type": "file",
                        "filename": "track.log",
                        "category": "track",
                        "level": "LOG",
                        "layout": {
                            "type": "messagePassThrough"
                        }
                    }
                ]
            }
        ]
    }

---
使用

初始化

主进程：

    logger.init("master", [option]);
    // [option]为多日志文件配置，如上

工作进程：

    var logger = require('@qnpm/q-logger');
    logger.init('worker', [option]); // 初始化日志系统

接口：

    logger.error(); // 记录错误
    logger.info(); // 记录普通日志

<a name="qexception"></a>
### 异常 q-exception
---
使用

    var exception = require('@qnpm/q-exception');

    exception.init(logger); // 初始化异常捕获系统，需传入logger用作错误记录

    // 捕获异步异常，放到所有中间件前面
    app.use(exception.catchAsync());

    // 捕获同步异常，放到所有中间件后面
    app.use(exception.catchSync());

<a name="qhealthcheck"></a>
### healthcheck q-healthcheck
---
使用

    var healthcheck = require('@qnpm/q-healthcheck');
    // healthcheck 发布时有用
    healthcheck.check(app, path.join(__dirname, 'healthcheck.html')); // 传入healthcheck的路径

<a name="qmonitor"></a>
### 监控 q-monitor
---
使用

    var qmonitor = require('@qnpm/q-monitor');
    qmonitor.addCount('监控指标名');
    qmonitor.addTime('监控指标名', '时间');

<a name="qmultiprocess"></a>
### 多进程 q-multiprocess
---
使用

     var opts = {
      // CPU核数
      numCPUs: require('os').cpus().length,
      // 端口
      port: app.get('port'),
      // 子进程收到父进程消息后父进程执行方法
      workerMessage: function (msg, workers) {

      },
      ready: function(workers) {

      }
    };

    multiprocess.listen(app, opts);