{"id":21524389,"url":"https://github.com/2o3t/2o3t-core","last_synced_at":"2025-03-17T18:15:04.697Z","repository":{"id":42113165,"uuid":"149906465","full_name":"2o3t/2o3t-Core","owner":"2o3t","description":"This is a service extension framework based on KOA2.","archived":false,"fork":false,"pushed_at":"2022-12-03T06:45:31.000Z","size":409,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-01-24T05:11:45.472Z","etag":null,"topics":["2o3t","core","koa2","nodejs","server"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/2o3t.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-22T18:43:05.000Z","updated_at":"2019-11-04T06:27:46.000Z","dependencies_parsed_at":"2023-01-23T04:30:39.011Z","dependency_job_id":null,"html_url":"https://github.com/2o3t/2o3t-Core","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2o3t%2F2o3t-Core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2o3t%2F2o3t-Core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2o3t%2F2o3t-Core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2o3t%2F2o3t-Core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2o3t","download_url":"https://codeload.github.com/2o3t/2o3t-Core/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244085031,"owners_count":20395523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2o3t","core","koa2","nodejs","server"],"created_at":"2024-11-24T01:24:49.000Z","updated_at":"2025-03-17T18:15:04.675Z","avatar_url":"https://github.com/2o3t.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 说明记录\n\n## 项目结构(必须)\n\n```js\nROOT: {\n    config(s): \"配置文件Config存放处\",\n    plugin(s): \"插件统一存放, 只加载根目录的文件及文件夹, 不支持文件包含\",\n    helper(s): \"工具辅助类统一存放(一般是固定不变的静态工具)\",\n    middleware(s): \"中间件统一存放\",\n    controller(s): \"控制器统一存放\",\n    service(s): \"服务类型统一存放\",\n    router(s): \"路由控制类统一存放\",\n}\n```\n\n类加载顺序:\n    config \u003e plugin \u003e helper \u003e middleware \u003e controller \u003e service \u003e router\n\n## Init\n\n初始化, 例如:\n\n```js\n    const AppCore = require('./app/server');\n\n    const app = new AppCore({\n        baseDir: __dirname, // 根目录, (选配, 默认 process.cwd())\n    });\n```\n\n## Config\n\n环境配置: `.env` , 如下:\n\n```conf\n    HOSTNAME=localhost\n    # node env\n    NODE_ENV=development\n    # scope\n    SERVER_SCOPE=local\n\n    # logger 启用日志列表\n    LOGGER_ALLOW=*  # 全部开启\n    LOGGER_ALLOW=DEBUG,INFO,ERROR,WARN  # 部分开启\n    # logger 禁用日志列表\n    LOGGER_BAN=NULL # 不开启禁用\n    LOGGER_BAN=* # 全部禁用\n    LOGGER_BAN=TEST,SYSTEM # 部分禁用\n\n    CORE_NAME=2O3T-Core # 应用名称\n```\n\n配置文件支持类型 [ `js` | `json` ]\n\n### 加载顺序：\n\nWill 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\n\n```json\n    '/configs/default.js',\n    '/configs/local.js',\n    '/configs/development.js',\n    '/configs/local_development.js',\n\n    '/configs/plugin.default.js',\n    '/configs/plugin.${scope}.js',\n    '/configs/plugin.${env}.js',\n    '/configs/plugin.${scope}_${env}.js',\n\n    '/configs/middlewares.default.js',\n    '/configs/middlewares.${scope}.js',\n    '/configs/middlewares.${env}.js',\n    '/configs/middlewares.${scope}_${env}.js',\n\n    '/configs/controller.default.js',\n    '/configs/controller.${scope}.js',\n    '/configs/controller.${env}.js',\n    '/configs/controller.${scope}_${env}.js',\n\n    '/configs/service.default.js',\n    '/configs/service.${scope}.js',\n    '/configs/service.${env}.js',\n    '/configs/service.${scope}_${env}.js',\n\n    '/configs/router.default.js',\n    '/configs/router.${scope}.js',\n    '/configs/router.${env}.js',\n    '/configs/router.${scope}_${env}.js',\n```\n\n### 优先级：\n\n```json\n    default \u003e {SERVER_SCOPE}  \u003e {NODE_ENV} \u003e {SERVER_SCOPE}_{NODE_ENV}\n```\n\n## Plugin\n\n插件代表是组件, 可独立生产(但是不能独立运行)，插件中的 `中间件` 会进行全局\b注册, 并且优先级最高。\n默认自动加载plugin(s)目录下文件, 可在初始化时, 更改目录路径.\n\n### PluginConfig\n\n可配置config信息, 如下:\n\n```js\n// 普通配置\nmodule.exports = {\n    mixins: [ 'plugin1', 'plugin2' ],  // 指定加载顺序, 自动加载plugin(s)目录下文件\n    plugin1: { // 给 ‘plugin1’ 指定配置文件\n        s: [],\n    },\n};\n```\n\n```js\n// 文件夹 或 模块配置\nmodule.exports = {\n    middleware: { // 扩展中间件\n        mixins: [ 'a-b', 'c-0', 'bodyParse' ], // 全局顺序注册加载\n        bodyParse: {\n            enable: true, // 开启全局注册(可选)\n            p: \"\", // 参数\n        },\n    },\n    controller: { // 扩展 controller\n        mixins: [ 'user' ],\n    },\n    service: { // 扩展 service\n        mixins: [ 'user' ],\n    },\n    config: { // 其它参数\n        RPG: 'I AM Plugins',\n    },\n    \"555\": \"666\",  // 其它参数\n}\n```\n\n插件类型可以是以下任一种:\n\n- 一个单独的外部模块.\n- 一个单独的内部文件夹.\n- 一个单独的文件.\n\n插件返回值(支持任何形式)可进行全局注册, 调用如下:\n\n```js\n    this.plugin.${filename}\n    // or\n    app.loadPlugin.${filename}\n```\n\n## Middleware\n\n中间件，只是全局进行注册，但是并不进行使用。\n可以在 Router 中配置使用，或者手动使用 `app.loadMiddleware.${filename}`。\n\n如果想全局使用的话，可以在 `config/middlewares.${default}.js` 中单独配置，通过 `mixins` 进行全局顺序注册, 或者是 `enable` 参数进行注册，如下：\n\n```js\n    mixins: [ 'bodyParse' ], // 自动进行全局顺序注册\n    bodyParse: {\n        enable: true, // 开启自动全局注册(true-全局注册, false-不开启)\n        bo: 33,\n        c: 3,\n    },\n```\n\n## Controller\n\n在 `config/controller.${default}.js` 中可以通过 `mixins` 配置需要加载的 Controller 优先顺序， 默认加载所有 Controller 文件。\n其它参数配置统一。\n\n```js\n    mixins: [ 'user', 'cms' ], // 控制加载顺序\n\n    user: {\n        name: 'xiao ming, 红',\n    },\n```\n\n另，Controller 文件需要以如下格式书写，如：\n\n```js\nclass UserController {\n\n}\nmodule.exports = UserController;\n```\n\n注入参数可通过 `this.options` 进行获取。\n还支持以下参数：\n\n```js\nthis.appInfo\nthis.config\nthis.plugin\nthis.service\nthis.helper\nthis.logger\n```\n\n\n## Service\n\n待补充\n\n```js\nclass UserService {\n\n    updateInfo() {\n        // do something\n    }\n}\n\nmodule.exports = UserService;\n```\n\n## Router\n\n待补充\n\n```js\nmodule.exports = function(router) {\n    router.get('/', this.controller.user.index);\n    router.get('/test', router.new().routes());\n    // 代理透传\n    router.proxy('/p/fef91266a44c', {\n        target: 'https://www.baidu.com',\n        headers: {\n            '007': '008',\n        },\n    });\n};\n```\n\n## Helper\n\n待补充\n\n```js\n    app.loadHelper.${filename}.${method};\n    // ort\n    this.helper.${filename}.${method};\n```\n\n## Utility (系统工具类)\n\n待补充\n\n\u003e 引用 `2o3t-utility` 工具库\n\n## Custom ？？？\n\n暂无\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2o3t%2F2o3t-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2o3t%2F2o3t-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2o3t%2F2o3t-core/lists"}