Giter Club home page Giter Club logo

zhennann / cabloy Goto Github PK

View Code? Open in Web Editor NEW
922.0 922.0 130.0 184.57 MB

🚀 CabloyJS是一款自带工作流引擎的Node.js全栈框架,面向开发者的低代码开发平台。实现了真正意义的“一次开发,到处运行”的跨端跨平台理念。只需一套代码,即可同时实现B端中后台管理系统和C端前台应用。只需一套代码,即可同时跨端PC和Mobile,并且Mobile端是接近原生体验。A Node.js full-stack framework with workflow engine, based on koa + egg + vue + framework7

Home Page: https://cabloy.com

License: MIT License

JavaScript 77.01% Less 3.23% CSS 9.53% Vue 5.09% Shell 0.22% EJS 4.92%
egg egg-framework framework7 full-stack low-code low-code-development-platform nodejs paas-framework pro-code vue-admin workflow-engine

cabloy's People

Contributors

dependabot[bot] avatar gitter-badger avatar zanderzhng avatar zhennann avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cabloy's Issues

CMS主题中图片位置优化

issue-cms

链接:https://community.cabloy.com/zh-cn/index.html

在mobile端会出现以下两个问题:

  • 问题1. 图片有时会顶出容器

  • 问题2. 图片下方左侧的文字没有补充右侧的空白区域。在pc端由于足够宽,所以效果不明显,在mobile端效果明显

  • 延伸: 内置的其他主题应该也存在类似的问题,需要一并修改

    • cms-themeaws
    • cms-themeblog
    • cms-themecommunity
    • cms-themedocs

工作流新版优化

Discussed in #34

Originally posted by zhennann April 23, 2023

背景

  1. 数据管理有两个维度:
    1. 基于业务管理
    2. 基于流程管理
  2. 两个维度如何进行统一
    1. 数据操作权限如何统一
    2. 数据字段权限如何统一
    3. 明细数据权限和字段权限如何统一

核心理念

  1. 以业务管理为主
  2. 流程只不过是把不同用户的数据操作动态串联起来
  3. 流程是派生的“业务视图”

实现思路

  1. 先基于业务管理设计“数据操作权限”和“数据字段权限”,以及“明细权限”
  2. 再进行流程适配

直接通过websocket通道获取统计值数据

现象

当web页面不可见时,websocket通道自动关闭,当web页面再次可见时,websocket通道又自动开启。为了保证统计数据的实时性和一致性,websocket通道再次开启时,这些统计值数据需要自动重新从后端获取。
当web页面反复切换可见状态多次时,就会多次发送api请求。

image

新方案

获取统计值直接使用websocket通道,不使用传统的http api模式

docker-compose problem

using [email protected]

I tried to run docker-compose , however cabloy is not starting up due to an error:

here is the error log:

Error: secret should be set
cabloy-egg-born-template-cabloy-4309-app-1 | at module.exports (/opt/node/app/node_modules/koa-jwt2/lib/index.js:21:42)
cabloy-egg-born-template-cabloy-4309-app-1 | at module.exports (/opt/node/app/packages/egg-born-backend/app/middleware/jwt.js:99:19)
cabloy-egg-born-template-cabloy-4309-app-1 | at CustomAppWorkerLoader.loadMiddleware (/opt/node/app/node_modules/egg-core/lib/loader/mixin/middleware.js:75:12)
cabloy-egg-born-template-cabloy-4309-app-1 | at CustomAppWorkerLoader.load (/opt/node/app/node_modules/@zhennann/egg/lib/loader/app_worker_loader.js:39:10)
cabloy-egg-born-template-cabloy-4309-app-1 | at CustomAppWorkerLoader.load (/opt/node/app/packages/egg-born-backend/lib/load/app.js:14:11)
cabloy-egg-born-template-cabloy-4309-app-1 | at new Application (/opt/node/app/node_modules/@zhennann/egg/lib/application.js:66:19)
cabloy-egg-born-template-cabloy-4309-app-1 | at new Application (/opt/node/app/packages/egg-born-backend/lib/framework.js:8:1)
cabloy-egg-born-template-cabloy-4309-app-1 | at Object. (/opt/node/app/node_modules/egg-cluster/lib/app_worker.js:23:9)
cabloy-egg-born-template-cabloy-4309-app-1 | at Module._compile (node:internal/modules/cjs/loader:1196:14)
cabloy-egg-born-template-cabloy-4309-app-1 | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1250:10)
cabloy-egg-born-template-cabloy-4309-app-1 | at Module.load (node:internal/modules/cjs/loader:1074:32)
cabloy-egg-born-template-cabloy-4309-app-1 | at Function.Module._load (node:internal/modules/cjs/loader:909:12)
cabloy-egg-born-template-cabloy-4309-app-1 | at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
cabloy-egg-born-template-cabloy-4309-app-1 | at node:internal/main/run_main_module:22:47

图片裁剪固定尺寸

通过ebtype: file 定义的图片上传组件,希望增加代码控制裁剪尺寸的功能。谢谢!

Projects using CabloyJS

If you can share about your project, please do comment and let us all know🙏
如果方便的话,请将您的项目信息与大家分享、交流🙏

Detail新方案

Discussed in #35

Originally posted by zhennann April 23, 2023

背景

  • 原有方案:通过a-detail模块来实现明细表的管理
  • 新方案:由于已经实现了ItemOnly机制,那么可以在ItemOnly机制之上实现新的detail方案

益处

  • 简化代码,简化概念
  • 简化二次开发
  • detail可以直接延用atom的功能,从而支持更丰富的功能特性

概念辨析

  1. Detail其实是一个更广泛的概念。比如,角色的授权:授权记录表就是角色的明细表。因此,Detail的新方案具有更广泛的适用性,也就意味着开发新功能可以节省可观的代码量

设计细节

  1. 明细的meta:需要指定atomClassMain(是谁的明细)
  2. 明细表要存储atomIdMain字段,方便进行权限判断
    • 在存入atomIdMain值时,字段名可以配置为别的字段名称
  3. 如果按照不同的宿主来管理,那么就需要不同的明细atomClass,但是可以共用数据表
    • 比如:comment表,既可以基于文章来管理,也可以基于用户来管理。二者的权限机制是不同的,因此需要分开atomClass
    • 比如:基于角色的数据权限记录:既可以基于角色来查询,也可以基于用户来查询。那么,就需要分别实现两个明细atomClass,其atomClassMain分别是角色、用户

权限机制

  1. 权限分两层:
    • 第一层:继承自宿主的某个action权限,比如,拥有了角色的授权指令的权限,就可以在授权明细页面进行CRUD。如果没有指定rightInherit配置,则忽略本层权限控制,比如spreadsBulk指令
actions: {
      create: {
        rightInherit: 'atomAuthorizations',
        createDelay: true,
      },
      read: {
        rightInherit: 'atomAuthorizations',
      },
      spreadsBulk: {
        code: 101,
        title: 'RoleAtomRightSpread',
        actionModule: 'a-baseadmin',
        actionComponent: 'actionRoleRight',
        icon: { f7: ':tools:spreadsheet' },
        bulk: true,
        select: false,
      },
}
* 第二层:明细可以指定meta.enableRight,这样可以对明细条目进行进一步的范围权限控制
  1. 权限配置:
    • 如果meta.enableRight为false,只需判断rightInherit,因此直接从meta中收集可用指令集合
    • 如果设置了meta.enableRight,那么就需要把授权记录存入数据库,因此是从数据库收集可用指令集合

npm run dev:front启动报错

作者你好,报错如下:
UnhandledSchemeError: Reading from "C:Projectcabloy-demo
ode_modulesegg-born-front__runtimemodulesa-basedist ront.js" is not handled by plugins (Unhandled scheme).
Webpack supports "data:" and "file:" URIs by default.

You may need an additional plugin to handle "c:" URIs.

想问下这个该怎么解决?

关于model对象的delete和update批量操作问题

目前model对象的delete和update只支持根据ID操作,不能满足很多需要批量更新和删除的场景。如果采用先get在update或delete,在简单场景中可以实现,但在复杂业务中,比如多层嵌套循环中操作,异步的get就会报错,从而只能写query语句去做了。希望加入批量更新和删除的支持

关于框架的几点疑惑

作为一名算法准备上手做一款应用,有幸找到这款框架,无论从理念还是使用都非常喜欢,看了文档还是有一些疑问(纯新手),主要是结合自己应用方面的,希望能解答下,非常感激。

背景

要做的应用是给用户提供一个上传视频的接口,然后主要提供视频存储(包括查询、删除等)、视频分析(包括视频截图、人脸检测、人脸识别、情绪甄别等一系列服务)。

问题

  1. 整个服务要分开写成多个 module 还是全部放在一个 module 里面?
  2. 如果有多个 module 是怎么同时和前后端交互的?我试了一下(用 Tom 账号)两个模块(test-cook 和 test-todo)的内容会在一起出现,也就是说模块之间完全独立的,那彼此之间如果有数据交互要如何操作(比如上传的视频给分析接口)。不过新注册的或者用 demo001 的账户就只有 test-todo 模块的,但是登陆后 “新建” 功能都没定义。所以这里有点迷糊,一下子不知道该怎么上手了。

问题比较小白,主要是不知道第一步该怎么开始自己的项目,非常感谢。

【bug】docker-compose up doesn't work !

When follow the section "Appendix 1. Docker Compose" on the Quick Start page, after run docker-compose build docker-compose up command, got error like bellow, the "cabloy-app-1" container can not be ready.

Reproduce Steps:

  1. clone the repo
  2. run the command docker-compose build
  3. run the command docker-compose up
cabloy-app-1 exited with code 1
cabloy-app-1    | wait-for-it.sh: waiting 15 seconds for mysql:3306
cabloy-app-1    | wait-for-it.sh: mysql:3306 is available after 0 seconds
cabloy-app-1    | wait-for-it.sh: waiting 15 seconds for redis:6379
cabloy-app-1    | wait-for-it.sh: redis:6379 is available after 0 seconds
cabloy-app-1    | cp: cannot stat '/opt/node/app/dist/*': No such file or directory
cabloy-app-1    |
cabloy-app-1    | > start:backend
cabloy-app-1    | > node ./packages/egg-born-scripts/bin/egg-born-scripts.js backend-start
cabloy-app-1    |
cabloy-app-1    | [egg-scripts] Starting egg-born-backend application at /opt/node/app/src/backend
cabloy-app-1    | [egg-scripts] Run node --no-deprecation --trace-warnings /opt/node/app/node_modules/@zhennann/egg-scripts/lib/start-cluster {"framework":"/opt/node/app/packages/egg-born-backend","title":"cabloy-server-cabloy-source","baseDir":"/opt/node/app/src/backend"} --title=cabloy-server-cabloy-source
cabloy-app-1    | 2022-06-21 07:08:21,900 INFO 51 [master] =================== egg-born-backend start =====================
cabloy-app-1    | 2022-06-21 07:08:21,901 INFO 51 [master] node version v16.15.1
cabloy-app-1    | 2022-06-21 07:08:21,901 INFO 51 [master] egg-born-backend version 6.3.9
cabloy-app-1    | 2022-06-21 07:08:21,901 INFO 51 [master] start with options:
cabloy-app-1    | {
cabloy-app-1    |   "framework": "/opt/node/app/packages/egg-born-backend",
cabloy-app-1    |   "baseDir": "/opt/node/app/src/backend",
cabloy-app-1    |   "workers": 8,
cabloy-app-1    |   "plugins": null,
cabloy-app-1    |   "https": false,
cabloy-app-1    |   "title": "cabloy-server-cabloy-source"
cabloy-app-1    | }
cabloy-app-1    | 2022-06-21 07:08:21,901 INFO 51 [master] start with env: isProduction: true, EGG_SERVER_ENV: undefined, NODE_ENV: production
cabloy-app-1    | 2022-06-21 07:08:21,912 INFO 51 [master] agent_worker#1:58 start with clusterPort:45283
cabloy-app-1    | 2022-06-21 07:08:22,648 WARN 58 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:22,655 INFO 58 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:22,683 INFO 58 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:22,683 INFO 58 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:22,683 INFO 58 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:22,778 INFO 58 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"agent"}
cabloy-app-1    |
cabloy-app-1    | === Local Modules ===
cabloy-app-1    | > a-version
cabloy-app-1    | > a-instance
cabloy-app-1    | > a-status
cabloy-app-1    | > a-sequence
cabloy-app-1    | > a-base
cabloy-app-1    | > a-antdv
cabloy-app-1    | > a-antvg6
cabloy-app-1    | > a-antvlayout
cabloy-app-1    | > a-antvx6
cabloy-app-1    | > a-app
cabloy-app-1    | > a-flow
cabloy-app-1    | > a-appbooster
cabloy-app-1    | > a-auth
cabloy-app-1    | > a-authgithub
cabloy-app-1    | > a-authopen
cabloy-app-1    | > a-authsimple
cabloy-app-1    | > a-authsms
cabloy-app-1    | > a-baseadmin
cabloy-app-1    | > a-basefront
cabloy-app-1    | > a-baselayout
cabloy-app-1    | > a-cache
cabloy-app-1    | > a-captcha
cabloy-app-1    | > a-captchasimple
cabloy-app-1    | > a-chartjs
cabloy-app-1    | > a-cli
cabloy-app-1    | > a-clibooster
cabloy-app-1    | > a-cms
cabloy-app-1    | > a-codemirror
cabloy-app-1    | > a-components
cabloy-app-1    | > a-dashboard
cabloy-app-1    | > a-detail
cabloy-app-1    | > a-dict
cabloy-app-1    | > a-dictbooster
cabloy-app-1    | > a-echarts
cabloy-app-1    | > a-event
cabloy-app-1    | > a-file
cabloy-app-1    | > a-flowbehavior
cabloy-app-1    | > a-flowchart
cabloy-app-1    | > a-flownode
cabloy-app-1    | > a-host
cabloy-app-1    | > a-icon
cabloy-app-1    | > a-iconbooster
cabloy-app-1    | > a-jsoneditor
cabloy-app-1    | > a-layoutmobile
cabloy-app-1    | > a-layoutpc
cabloy-app-1    | > a-login
cabloy-app-1    | > a-mail
cabloy-app-1    | > a-markdownblock
cabloy-app-1    | > a-markdownrender
cabloy-app-1    | > a-markdownstyle
cabloy-app-1    | > a-socketio
cabloy-app-1    | > a-message
cabloy-app-1    | > a-oauth
cabloy-app-1    | > a-progress
cabloy-app-1    | > a-settings
cabloy-app-1    | > a-share
cabloy-app-1    | > a-stats
cabloy-app-1    | > a-themebrilliant
cabloy-app-1    | > a-themehyacinth
cabloy-app-1    | > a-user
cabloy-app-1    | > a-useronline
cabloy-app-1    | > a-validation
cabloy-app-1    | > cms-pluginbase
cabloy-app-1    | > cms-pluginarticle
cabloy-app-1    | > cms-pluginbacktotop
cabloy-app-1    | > cms-plugincopyright
cabloy-app-1    | > cms-pluginmarkdowngithub
cabloy-app-1    | > cms-pluginrss
cabloy-app-1    | > cms-pluginsidebar
cabloy-app-1    | > cms-pluginsocialshare
cabloy-app-1    | > cms-pluginsubmit
cabloy-app-1    | > cms-plugintrack
cabloy-app-1    | > cms-pluginuser
cabloy-app-1    | > cms-sitecommunity
cabloy-app-1    | > cms-sitedocumentation
cabloy-app-1    | > cms-themeaws
cabloy-app-1    | > cms-themeblog
cabloy-app-1    | > cms-themecommunity
cabloy-app-1    | > cms-themedocs
cabloy-app-1    | > a-index
cabloy-app-1    |
cabloy-app-1    | === Global Modules ===
cabloy-app-1    | > a-flowtask
cabloy-app-1    | > a-markdown
cabloy-app-1    |
cabloy-app-1    | === Monkey Modules ===
cabloy-app-1    |
cabloy-app-1    | === Local Suites ===
cabloy-app-1    |
cabloy-app-1    | === Vendor Suites ===
cabloy-app-1    |
cabloy-app-1    |
cabloy-app-1    | 2022-06-21 07:08:24,786 INFO 58 [egg:core] dump config after load, 7ms
cabloy-app-1    | 2022-06-21 07:08:24,813 INFO 58 [egg-watcher:agent] watcher start success
cabloy-app-1    | 2022-06-21 07:08:24,815 INFO 58 [egg:core:ready_stat] end ready task /opt/node/app/node_modules/egg-schedule/agent.js:12:9, remain ["/opt/node/app/node_modules/egg-watcher/lib/init.js:15:14"]
cabloy-app-1    | 2022-06-21 07:08:24,816 WARN 58 [egg-watcher] defaultEventSource watcher will NOT take effect
cabloy-app-1    | 2022-06-21 07:08:24,816 INFO 58 [egg:core:ready_stat] end ready task /opt/node/app/node_modules/egg-watcher/lib/init.js:15:14, remain []
cabloy-app-1    | 2022-06-21 07:08:24,819 INFO 51 [master] agent_worker#1:58 started (2914ms)
cabloy-app-1    | 2022-06-21 07:08:24,820 INFO 51 [master] start appWorker with args ["{\"framework\":\"/opt/node/app/packages/egg-born-backend\",\"baseDir\":\"/opt/node/app/src/backend\",\"workers\":8,\"plugins\":null,\"https\":false,\"title\":\"cabloy-server-cabloy-source\",\"clusterPort\":45283}"]
cabloy-app-1    | 2022-06-21 07:08:24,866 INFO 51 [master] app_worker#1:69 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:24,868 INFO 51 [master] app_worker#2:70 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:24,868 INFO 51 [master] app_worker#3:76 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:24,869 INFO 51 [master] app_worker#4:82 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:24,870 INFO 51 [master] app_worker#5:88 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:24,870 INFO 51 [master] app_worker#6:94 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:24,871 INFO 51 [master] app_worker#7:100 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:24,872 INFO 51 [master] app_worker#8:102 start, state: none, current workers: ["1","2","3","4","5","6","7","8"]
cabloy-app-1    | 2022-06-21 07:08:25,984 WARN 69 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:25,994 INFO 69 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,006 WARN 76 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:26,007 WARN 70 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:26,016 INFO 76 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,016 INFO 70 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,020 WARN 82 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:26,028 WARN 88 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:26,030 INFO 82 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,030 WARN 94 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:26,037 WARN 102 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:26,038 INFO 88 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,039 INFO 94 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,041 INFO 69 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,041 INFO 69 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,042 INFO 69 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:26,048 INFO 102 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,060 INFO 76 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,061 INFO 76 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,061 INFO 76 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:26,061 INFO 70 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,061 INFO 70 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,061 INFO 70 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:26,078 INFO 82 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,079 INFO 82 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,078 WARN 100 plugin static has been defined that is {"enable":true,"package":"egg-static","name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js"}, but you define again in /opt/node/app/packages/egg-born-backend/config/plugin.prod.js
cabloy-app-1    | 2022-06-21 07:08:26,079 INFO 82 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:26,084 INFO 88 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,084 INFO 88 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,084 INFO 88 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:26,085 INFO 94 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,086 INFO 94 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,086 INFO 94 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:26,090 INFO 100 Plugin development is disabled by env unmatched, require env([ 'local' ]) but got env is prod
cabloy-app-1    | 2022-06-21 07:08:26,094 INFO 102 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,094 INFO 102 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,094 INFO 102 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
cabloy-app-1    | 2022-06-21 07:08:26,138 INFO 100 [egg:core] App root: /opt/node/app/src/backend
cabloy-app-1    | 2022-06-21 07:08:26,138 INFO 100 [egg:core] All *.log files save on "/root/logs/cabloy-source"
cabloy-app-1    | 2022-06-21 07:08:26,138 INFO 100 [egg:core] Loaded enabled plugin [{"enable":true,"package":"egg-session","name":"session","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-session","version":"3.3.0"},{"enable":true,"package":"egg-security","name":"security","dependencies":[],"optionalDependencies":["session"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-security","version":"2.10.1"},{"enable":true,"package":"egg-jsonp","name":"jsonp","dependencies":[],"optionalDependencies":["security"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-jsonp","version":"2.0.0"},{"enable":true,"package":"egg-onerror","name":"onerror","dependencies":[],"optionalDependencies":["jsonp"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-onerror","version":"2.1.0"},{"enable":true,"package":"egg-i18n","name":"i18n","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-i18n","version":"2.1.1"},{"enable":true,"package":"egg-watcher","name":"watcher","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-watcher","version":"3.1.1"},{"enable":true,"package":"egg-schedule","name":"schedule","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-schedule","version":"3.6.6"},{"enable":true,"package":"egg-multipart","name":"multipart","dependencies":[],"optionalDependencies":["schedule"],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-multipart","version":"2.13.1"},{"enable":true,"package":"egg-logrotator","name":"logrotator","dependencies":["schedule"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/node_modules/egg/config/plugin.js","path":"/opt/node/app/node_modules/egg-logrotator","version":"3.1.0"},{"enable":true,"name":"static","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","package":"egg-static","path":"/opt/node/app/node_modules/egg-static","version":"2.2.0"},{"enable":true,"package":"egg-mysql","name":"mysql","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-mysql","version":"3.1.1"},{"enable":true,"package":"@zhennann/egg-passport","name":"passport","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-passport","version":"2.1.5"},{"enable":true,"package":"egg-redis","name":"redis","dependencies":[],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/egg-redis","version":"2.4.0"},{"enable":true,"package":"@zhennann/egg-socket.io","name":"io","dependencies":["session"],"optionalDependencies":[],"env":[],"from":"/opt/node/app/packages/egg-born-backend/config/plugin.prod.js","path":"/opt/node/app/node_modules/@zhennann/egg-socket.io","version":"5.0.4"}]
^@cabloy-app-1    | 2022-06-21 07:08:26,365 INFO 69 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"application"}
cabloy-app-1    | 2022-06-21 07:08:26,378 INFO 76 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"application"}
cabloy-app-1    | 2022-06-21 07:08:26,387 INFO 70 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"application"}
cabloy-app-1    | 2022-06-21 07:08:26,403 INFO 94 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"application"}
cabloy-app-1    | 2022-06-21 07:08:26,404 INFO 88 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"application"}
cabloy-app-1    | 2022-06-21 07:08:26,410 INFO 69 [egg-multipart] stream mode enable
cabloy-app-1    | 2022-06-21 07:08:26,414 ERROR 69 nodejs.AssertionError: [egg-mysql] 'host: undefined', 'port: undefined', 'user: undefined', 'database: null' are required on config
cabloy-app-1    |     at Singleton.createOneClient [as create] (/opt/node/app/node_modules/egg-mysql/lib/mysql.js:13:3)
cabloy-app-1    |     at Singleton.createInstance (/opt/node/app/node_modules/egg/lib/core/singleton.js:88:17)
cabloy-app-1    |     at /opt/node/app/node_modules/egg/lib/core/singleton.js:40:29
cabloy-app-1    |     at Array.forEach (<anonymous>)
cabloy-app-1    |     at Singleton.initSync (/opt/node/app/node_modules/egg/lib/core/singleton.js:39:36)
cabloy-app-1    |     at Singleton.init (/opt/node/app/node_modules/egg/lib/core/singleton.js:21:68)
cabloy-app-1    |     at Application.addSingleton (/opt/node/app/node_modules/egg/lib/egg.js:474:35)
cabloy-app-1    |     at module.exports (/opt/node/app/node_modules/egg-mysql/lib/mysql.js:9:7)
cabloy-app-1    |     at module.exports (/opt/node/app/node_modules/egg-mysql/app.js:6:29)
cabloy-app-1    |     at Hook.configDidLoad (/opt/node/app/node_modules/egg-core/lib/lifecycle.js:91:9)
cabloy-app-1    |     at Lifecycle.triggerConfigDidLoad (/opt/node/app/node_modules/egg-core/lib/lifecycle.js:145:14)
cabloy-app-1    |     at Lifecycle.triggerConfigWillLoad (/opt/node/app/node_modules/egg-core/lib/lifecycle.js:139:10)
cabloy-app-1    |     at CustomAppWorkerLoader.loadCustomApp (/opt/node/app/node_modules/egg-core/lib/loader/mixin/custom.js:37:20)
cabloy-app-1    |     at CustomAppWorkerLoader.load (/opt/node/app/node_modules/egg/lib/loader/app_worker_loader.js:35:10)
cabloy-app-1    |     at CustomAppWorkerLoader.load (/opt/node/app/packages/egg-born-backend/lib/load/app.js:14:11)
cabloy-app-1    |     at new Application (/opt/node/app/node_modules/egg/lib/application.js:66:19)
cabloy-app-1    | generatedMessage: false
cabloy-app-1    | code: "ERR_ASSERTION"
cabloy-app-1    | actual: undefined
cabloy-app-1    | expected: true
cabloy-app-1    | operator: "=="
cabloy-app-1    | pid: 69
cabloy-app-1    | hostname: 4f8b190b8d02
cabloy-app-1    |
cabloy-app-1    | 2022-06-21 07:08:26,414 INFO 82 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"application"}
cabloy-app-1    | 2022-06-21 07:08:26,415 INFO 102 [egg:logger] init all loggers with options: {"dir":"/root/logs/cabloy-source","encoding":"utf8","env":"prod","level":"INFO","consoleLevel":"INFO","disableConsoleAfterReady":true,"outputJSON":false,"buffer":true,"appLogName":"cabloy-source-web.log","coreLogName":"egg-web.log","agentLogName":"egg-agent.log","errorLogName":"common-error.log","coreLogger":{},"allowDebugAtProd":false,"enablePerformanceTimer":false,"type":"application"}
cabloy-app-1    | /opt/node/app/node_modules/egg-cluster/lib/app_worker.js:26
cabloy-app-1    |   throw err;
cabloy-app-1    |   ^
cabloy-app-1    |
cabloy-app-1    | AssertionError [ERR_ASSERTION]: [egg-mysql] 'host: undefined', 'port: undefined', 'user: undefined', 'database: null' are required on config
cabloy-app-1    |     at Singleton.createOneClient [as create] (/opt/node/app/node_modules/egg-mysql/lib/mysql.js:13:3)
cabloy-app-1    |     at Singleton.createInstance (/opt/node/app/node_modules/egg/lib/core/singleton.js:88:17)
cabloy-app-1    |     at /opt/node/app/node_modules/egg/lib/core/singleton.js:40:29
cabloy-app-1    |     at Array.forEach (<anonymous>)
cabloy-app-1    |     at Singleton.initSync (/opt/node/app/node_modules/egg/lib/core/singleton.js:39:36)
cabloy-app-1    |     at Singleton.init (/opt/node/app/node_modules/egg/lib/core/singleton.js:21:68)
cabloy-app-1    |     at Application.addSingleton (/opt/node/app/node_modules/egg/lib/egg.js:474:35)
cabloy-app-1    |     at module.exports (/opt/node/app/node_modules/egg-mysql/lib/mysql.js:9:7)
cabloy-app-1    |     at module.exports (/opt/node/app/node_modules/egg-mysql/app.js:6:29)
cabloy-app-1    |     at Hook.configDidLoad (/opt/node/app/node_modules/egg-core/lib/lifecycle.js:91:9)
cabloy-app-1    |     at Lifecycle.triggerConfigDidLoad (/opt/node/app/node_modules/egg-core/lib/lifecycle.js:145:14)
cabloy-app-1    |     at Lifecycle.triggerConfigWillLoad (/opt/node/app/node_modules/egg-core/lib/lifecycle.js:139:10)
cabloy-app-1    |     at CustomAppWorkerLoader.loadCustomApp (/opt/node/app/node_modules/egg-core/lib/loader/mixin/custom.js:37:20)
cabloy-app-1    |     at CustomAppWorkerLoader.load (/opt/node/app/node_modules/egg/lib/loader/app_worker_loader.js:35:10)
cabloy-app-1    |     at CustomAppWorkerLoader.load (/opt/node/app/packages/egg-born-backend/lib/load/app.js:14:11)
cabloy-app-1    |     at new Application (/opt/node/app/node_modules/egg/lib/application.js:66:19) {
cabloy-app-1    |   generatedMessage: false,
cabloy-app-1    |   code: 'ERR_ASSERTION',
cabloy-app-1    |   actual: undefined,
cabloy-app-1    |   expected: true,
cabloy-app-1    |   operator: '=='
cabloy-app-1    | }

schema/validator优化

Discussed in #44

Originally posted by zhennann July 12, 2023

背景

CabloyJS采用ajv进行数据的前端渲染和后端验证

  1. 通过schema来定义json数据规则
  2. 定义一个validator用于实际的验证工作
  3. 一个validator可以包含1个或者多个schema

目标

在大多数场景下,一个validator只需要包含一个schema。因此,可以依据schema自动定义validator,从而简化配置,减少代码量

方案

  1. 依据schema自动定义validator
  2. 如果存在一个validator包含多个schema的情况,只需按旧方案配置,从而覆盖缺省行为。也顺带实现了对旧方案的兼容处理

举例

原配置

src/module-system/a-baseadmin/backend/src/meta.js

module.exports = app => {
  // schemas
  const schemas = require('./config/validation/schemas.js')(app);
  ...
  // meta
  const meta = {
    ...
    validation: {
      validators: {
        roleRight: {
          schemas: 'roleRight',
        },
        roleRightSearch: {
          schemas: 'roleRightSearch',
        },
        roleResourceRight: {
          schemas: 'roleResourceRight',
        },
        roleResourceRightSearch: {
          schemas: 'roleResourceRightSearch',
        },
      },
      keywords: {},
      schemas,
    },
  };

  return meta;
};

优化后配置

module.exports = app => {
  // schemas
  const schemas = require('./config/validation/schemas.js')(app);
  ...
  // meta
  const meta = {
    ...
    validation: {
      validators: {},
      keywords: {},
      schemas,
    },
  };

  return meta;
};

cabloy用npm install报错--2023-07-14

操作系统:win11家庭版
nodeJS: v18.16.1
npm: 9.5.1
源码下载时间:2023-07-14 09:20
源码下载方式:git clone --depth=1 https://github.com/zhennann/cabloy.git
使用npm install报错如下:

D:\cabloy-lerna\cabloy>npm install
npm WARN deprecated [email protected]: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated [email protected]: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm WARN deprecated [email protected]: request has been deprecated, see request/request#3142
npm WARN deprecated [email protected]: The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.
npm ERR! code 1
npm ERR! path D:\cabloy-lerna\cabloy\node_modules\nx
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node ./bin/post-install
npm ERR! node:internal/modules/cjs/loader:1080
npm ERR! throw err;
npm ERR! ^
npm ERR!
npm ERR! Error: Cannot find module './lib/stringify'
npm ERR! Require stack:
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\braces\index.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\micromatch\index.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\utils\pattern.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\utils\index.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\managers\tasks.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\index.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\src\utils\nx-plugin.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\build-nodes\workspace-projects.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\build-nodes\index.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\build-project-graph.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\project-graph.js
npm ERR! - D:\cabloy-lerna\cabloy\node_modules\nx\bin\post-install.js
npm ERR! at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
npm ERR! at Module._load (node:internal/modules/cjs/loader:922:27)
npm ERR! at Module.require (node:internal/modules/cjs/loader:1143:19)
npm ERR! at require (node:internal/modules/cjs/helpers:110:18)
npm ERR! at Object. (D:\cabloy-lerna\cabloy\node_modules\braces\index.js:3:19)
npm ERR! at Module._compile (node:internal/modules/cjs/loader:1256:14)
npm ERR! at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
npm ERR! at Module.load (node:internal/modules/cjs/loader:1119:32)
npm ERR! at Module._load (node:internal/modules/cjs/loader:960:12)
npm ERR! at Module.require (node:internal/modules/cjs/loader:1143:19) {
npm ERR! code: 'MODULE_NOT_FOUND',
npm ERR! requireStack: [
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\braces\index.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\micromatch\index.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\utils\pattern.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\utils\index.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\managers\tasks.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\node_modules\fast-glob\out\index.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\src\utils\nx-plugin.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\build-nodes\workspace-projects.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\build-nodes\index.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\build-project-graph.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\src\project-graph\project-graph.js',
npm ERR! 'D:\cabloy-lerna\cabloy\node_modules\nx\bin\post-install.js'
npm ERR! ]
npm ERR! }
npm ERR!
npm ERR! Node.js v18.16.1

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\lzf1201_128634653559\AppData\Local\npm-cache_logs\2023-07-14T01_31_57_441Z-debug-0.log

工作流字段权限配置

#49

目标

  1. 在工作流节点,配置字段权限
  2. 同时支持主表和明细表

旧方案

  1. read/write分开配置
  2. 支持配置类型
  • 允许所有字段
  • 禁止所有字段
  • 允许指定字段
  • 自定义
  1. 旧方案截图
Pasted Graphic

新方案

  1. read/write合并配置,通过ebReadOnly进行标识
  2. 支持配置类型
类型 类型名称 说明
default 允许所有字段 直接使用默认schema
whitelist 允许指定字段(白名单) 以默认schema为基础,挑出指定的字段
blacklist 禁止指定字段(黑名单) 以默认schema为基础,对指定字段做调整
custom 自定义 支持更灵活的配置
  1. 说明
  • 每一个字段都允许配置:允许读/允许写
  • 如果基础schema中明确指定ebReadOnly: true,那么“允许写”就禁用
  • 换句话说,只允许降级,不允许升级(除非在“自定义”中设置)
  1. custom
  • 支持数组/对象
  • 数组:字段清单,每个字段可以是完整的property
  • 对象:可直接指定validator/schema
  1. 在此基础上,实现明细表的字段权限配置
  • 只需在一个页面依次展开:如果有明细表,就采用风箱组件,并且第一个显示“主表”
  • schema.details即可

配置范例

            schema: {
              type: 'default', // default/blacklist/whitelist/custom
              // value: ['atomName'],
              // value: [{ name: 'atomName' }],
              // value: [{ name: 'atomName', read: true, write: false }],
              // value: [
              //   'atomName',
              //   {
              //     name: 'description',
              //     property: {
              //       type: 'string',
              //       ebType: 'text',
              //       ebTitle: 'Description',
              //     },
              //   },
              // ],
              // value: {
              //   module: '',
              //   validator: '',
              //   schema: '',
              // },
            },

2023-04-23:New Solutions

Discussed in #36

Originally posted by zhennann April 23, 2023
原本说完成了通用的实体管理方案(即ItemOnly机制),就可以暂时将系统开发缓一缓,从而做些其他周边的工作。可是,当ItemOnly机制完成时,又衍生出了新的优化方案。这些优化方案很值得做。因为,这几个优化完成后,CabloyJS底层架构就是一个全新的面貌:代码更紧凑,功能更强大,二次开发更便捷
#32 ItemOnly机制
#33 Atom权限开关
#34 工作流新版优化
#35 Detail新方案

windows 下 git bash 中运行 dev:front 域名不正确

windows 下在 git bash 环境中运行 npm run dev:front,最后

> Listening at http://XXX:9092

其中 XXX 是 git bash 中环境变量 HOSTNAME,实际上是用户名。这个地址在浏览器中无法打开。

查看源码跟 node_modules\@zhennann\build\lib\project\front\build\dev-server.js 文件 34 行相关

const hostname = process.env.HOSTNAME || context.config.dev.hostname;

我的临时解决方法:把 dev:front 改成

cross-env HOSTNAME=localhost egg-born-bin front-dev

Got Error when start backend, is it related to db setup?

2018-08-17 14:58:02,540 WARN 10636 [-/127.0.0.1/-/5ms POST /api/a/base/auth/echo] nodejs.Error: 已锁定
at ErrorClass.throw (D:\Study\WP\cabloy-demo\node_modules\egg-born-backend\lib\base\error.js:28:19)
at Object.context.(anonymous function) [as throw] (D:\Study\WP\cabloy-demo\node_modules\egg-born-backend\lib\module\errors.js:31:39)
at instance (D:\Study\WP\cabloy-demo\node_modules\egg-born-module-a-instance\dist\backend.js:305:16)
at
at process._tickCallback (internal/process/next_tick.js:188:7)
code: 423
message: "已锁定"
status: 423
pid: 10636
hostname: Nick-PC

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.