2o3t-core

[Server Library] 2o3t.cn --> Server Core, denend on KOA.

Usage no npm install needed!

<script type="module">
  import o3tCore from 'https://cdn.skypack.dev/2o3t-core';
</script>

README

说明记录

项目结构(必须)

ROOT: {
    config(s): "配置文件Config存放处",
    plugin(s): "插件统一存放, 只加载根目录的文件及文件夹, 不支持文件包含",
    helper(s): "工具辅助类统一存放(一般是固定不变的静态工具)",
    middleware(s): "中间件统一存放",
    controller(s): "控制器统一存放",
    service(s): "服务类型统一存放",
    router(s): "路由控制类统一存放",
}

类加载顺序: config > plugin > helper > middleware > controller > service > router

Init

初始化, 例如:

    const AppCore = require('./app/server');

    const app = new AppCore({
        baseDir: __dirname, // 根目录, (选配, 默认 process.cwd())
    });

Config

环境配置: .env , 如下:

    HOSTNAME=localhost
    # node env
    NODE_ENV=development
    # scope
    SERVER_SCOPE=local

    # logger 启用日志列表
    LOGGER_ALLOW=*  # 全部开启
    LOGGER_ALLOW=DEBUG,INFO,ERROR,WARN  # 部分开启
    # logger 禁用日志列表
    LOGGER_BAN=NULL # 不开启禁用
    LOGGER_BAN=* # 全部禁用
    LOGGER_BAN=TEST,SYSTEM # 部分禁用

    CORE_NAME=2O3T-Core # 应用名称

配置文件支持类型 [ js | json ]

加载顺序:

Will merge config(s)/default.js 和 config(s)/${process.env.SERVER_SCOPE}.js 和 config(s)/${process.env.NODE_ENV}.js 和 config(s)/${process.env.SERVER_SCOPE}_${process.env.NODE_ENV}.js

    '/configs/default.js',
    '/configs/local.js',
    '/configs/development.js',
    '/configs/local_development.js',

    '/configs/plugin.default.js',
    '/configs/plugin.${scope}.js',
    '/configs/plugin.${env}.js',
    '/configs/plugin.${scope}_${env}.js',

    '/configs/middlewares.default.js',
    '/configs/middlewares.${scope}.js',
    '/configs/middlewares.${env}.js',
    '/configs/middlewares.${scope}_${env}.js',

    '/configs/controller.default.js',
    '/configs/controller.${scope}.js',
    '/configs/controller.${env}.js',
    '/configs/controller.${scope}_${env}.js',

    '/configs/service.default.js',
    '/configs/service.${scope}.js',
    '/configs/service.${env}.js',
    '/configs/service.${scope}_${env}.js',

    '/configs/router.default.js',
    '/configs/router.${scope}.js',
    '/configs/router.${env}.js',
    '/configs/router.${scope}_${env}.js',

优先级:

    default > {SERVER_SCOPE}  > {NODE_ENV} > {SERVER_SCOPE}_{NODE_ENV}

Plugin

插件代表是组件, 可独立生产(但是不能独立运行),插件中的 中间件 会进行全局注册, 并且优先级最高。 默认自动加载plugin(s)目录下文件, 可在初始化时, 更改目录路径.

PluginConfig

可配置config信息, 如下:

// 普通配置
module.exports = {
    mixins: [ 'plugin1', 'plugin2' ],  // 指定加载顺序, 自动加载plugin(s)目录下文件
    plugin1: { // 给 ‘plugin1’ 指定配置文件
        s: [],
    },
};
// 文件夹 或 模块配置
module.exports = {
    middleware: { // 扩展中间件
        mixins: [ 'a-b', 'c-0', 'bodyParse' ], // 全局顺序注册加载
        bodyParse: {
            enable: true, // 开启全局注册(可选)
            p: "", // 参数
        },
    },
    controller: { // 扩展 controller
        mixins: [ 'user' ],
    },
    service: { // 扩展 service
        mixins: [ 'user' ],
    },
    config: { // 其它参数
        RPG: 'I AM Plugins',
    },
    "555": "666",  // 其它参数
}

插件类型可以是以下任一种:

  • 一个单独的外部模块.
  • 一个单独的内部文件夹.
  • 一个单独的文件.

插件返回值(支持任何形式)可进行全局注册, 调用如下:

    this.plugin.${filename}
    // or
    app.loadPlugin.${filename}

Middleware

中间件,只是全局进行注册,但是并不进行使用。 可以在 Router 中配置使用,或者手动使用 app.loadMiddleware.${filename}

如果想全局使用的话,可以在 config/middlewares.${default}.js 中单独配置,通过 mixins 进行全局顺序注册, 或者是 enable 参数进行注册,如下:

    mixins: [ 'bodyParse' ], // 自动进行全局顺序注册
    bodyParse: {
        enable: true, // 开启自动全局注册(true-全局注册, false-不开启)
        bo: 33,
        c: 3,
    },

Controller

config/controller.${default}.js 中可以通过 mixins 配置需要加载的 Controller 优先顺序, 默认加载所有 Controller 文件。 其它参数配置统一。

    mixins: [ 'user', 'cms' ], // 控制加载顺序

    user: {
        name: 'xiao ming, 红',
    },

另,Controller 文件需要以如下格式书写,如:

class UserController {

}
module.exports = UserController;

注入参数可通过 this.options 进行获取。 还支持以下参数:

this.appInfo
this.config
this.plugin
this.service
this.helper
this.logger

Service

待补充

class UserService {

    updateInfo() {
        // do something
    }
}

module.exports = UserService;

Router

待补充

module.exports = function(router) {
    router.get('/', this.controller.user.index);
    router.get('/test', router.new().routes());
    // 代理透传
    router.proxy('/p/fef91266a44c', {
        target: 'https://www.baidu.com',
        headers: {
            '007': '008',
        },
    });
};

Helper

待补充

    app.loadHelper.${filename}.${method};
    // ort
    this.helper.${filename}.${method};

Utility (系统工具类)

待补充

引用 2o3t-utility 工具库

Custom ???

暂无