skybase 0.1.90 → 0.1.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.1.90](https://github.com/kongnet/skybase/compare/v0.1.89...v0.1.90) (2022-05-01)
2
+
3
+
4
+
5
+
1
6
  ## [0.1.89](https://github.com/kongnet/skybase/compare/v0.1.88...v0.1.89) (2022-04-29)
2
7
 
3
8
 
package/README.md CHANGED
@@ -1,39 +1,36 @@
1
1
  # skybase
2
- ![jiatuiLogo](https://github.com/kongnet/skybase/raw/master/screenShot/logo.png)
3
2
 
4
3
  Sky web base suit
5
4
 
6
5
  ## 安装 Install
7
6
 
8
-
9
7
  npm i skybase
10
8
 
11
-
12
- ## 开始你的web世界 Hello World
9
+ ## 开始你的 web 世界 Hello World
13
10
 
14
11
  const sky = require('skybase')
15
-
12
+
16
13
  sky.start({}, async () => {
17
14
  console.log('Program running...')
18
15
  })
19
16
 
20
17
  ## start(config, afterStart)
21
18
 
22
- skybase只有一个方法
19
+ skybase 只有一个方法
23
20
 
24
- * config 配置
25
- * afterStart 启动成功后执行的方法,可用async方法
21
+ - config 配置
22
+ - afterStart 启动成功后执行的方法,可用 async 方法
26
23
 
27
24
  ## 配置
28
25
 
29
26
  const path = require('path')
30
27
  module.exports = {
31
-
28
+
32
29
  /**
33
30
  * 项目名称,启动时,会以3D字体的形式在控制台打印
34
31
  * */
35
32
  name: 'skybase',
36
-
33
+
37
34
  /**
38
35
  * 中间件
39
36
  * ps. 填写中间件的文件名(如果不填文件后缀,则认为是.js),自定义的中间件一定要放在项目根目录的 middleware 文件夹里,不然找不到。
@@ -60,19 +57,19 @@ skybase只有一个方法
60
57
  'sky-output',
61
58
  'sky-api-register'
62
59
  ],
63
-
60
+
64
61
  /**
65
62
  * token 保存key值
66
63
  * */
67
64
  tokenName: 'skybase',
68
-
65
+
69
66
  /**
70
67
  * 入口文件的路径
71
68
  *
72
69
  * 如果不填,或者转为布尔值为false,则使用 path.dirname(process.mainModule.filename) ,即本node应用的入口文件所在目录
73
70
  * */
74
71
  rootDir: path.dirname(process.mainModule.filename),
75
-
72
+
76
73
  /**
77
74
  * api定义所在目录
78
75
  *
@@ -81,7 +78,7 @@ skybase只有一个方法
81
78
  * 填写相对于 rootDir 的相对路径
82
79
  * */
83
80
  apiDir: './model/api',
84
-
81
+
85
82
  /**
86
83
  * 控制器所在目录
87
84
  *
@@ -90,7 +87,7 @@ skybase只有一个方法
90
87
  * 填写相对于 rootDir 的相对路径
91
88
  * */
92
89
  routerDir: './router',
93
-
90
+
94
91
  /**
95
92
  * service所在目录
96
93
  *
@@ -100,12 +97,12 @@ skybase只有一个方法
100
97
  * 填写相对于 rootDir 的相对路径
101
98
  * */
102
99
  serviceDir: '',
103
-
100
+
104
101
  /**
105
102
  * 是否打印日志
106
103
  * */
107
104
  logger: true,
108
-
105
+
109
106
  /**
110
107
  * 自定义中间件所在目录
111
108
  *
@@ -114,7 +111,7 @@ skybase只有一个方法
114
111
  * 填写相对于 rootDir 的相对路径
115
112
  * */
116
113
  middlewareDir: './middleware',
117
-
114
+
118
115
  /**
119
116
  * 静态服务的路径
120
117
  *
@@ -123,7 +120,7 @@ skybase只有一个方法
123
120
  * 填写相对于 rootDir 的相对路径
124
121
  * */
125
122
  staticDir: './www',
126
-
123
+
127
124
  /**
128
125
  * 限制post来的数据,这个配置将在 sky/middleware/bodyParse.js 中使用
129
126
  */
@@ -142,21 +139,25 @@ skybase只有一个方法
142
139
 
143
140
  ## api 定义
144
141
 
145
- skybase框架的api定义功能主要有以下几点:
142
+ skybase 框架的 api 定义功能主要有以下几点:
146
143
 
147
- 1. 指定api所需参数,会自动校验参数是否符合设定
148
- 2. 输出api接口文档,前端同学可直观查看
144
+ 1. 指定 api 所需参数,会自动校验参数是否符合设定
145
+ 2. 输出 api 接口文档,前端同学可直观查看
149
146
  3. 指定接口的访问权限。如是否登录,是否签名,登录者是否拥有指定权限
150
- ### param中的type类型说明
151
- * int 整形
152
- * positive/negative 正数/负数
153
- * string 字符型
154
- * datetime 可以被Date.parse的 'YYYY-MM-DD hh:mm:ss'
155
- * enum 数组,并要求提交的参数包含在,数组列表中
156
- * bool bool型
157
- * number 数值型
158
- * array 数组型,用得少,可以为它配置items的类型: arrayParam1:{type:'array',items:{type:'string'}}
147
+
148
+ ### param 中的 type 类型说明
149
+
150
+ - int 整形
151
+ - positive/negative 正数/负数
152
+ - string 字符型
153
+ - datetime 可以被 Date.parse 的 'YYYY-MM-DD hh:mm:ss'
154
+ - enum 数组,并要求提交的参数包含在,数组列表中
155
+ - bool bool 型
156
+ - number 数值型
157
+ - array 数组型,用得少,可以为它配置 items 的类型: arrayParam1:{type:'array',items:{type:'string'}}
158
+
159
159
  ### 案例
160
+
160
161
  module.exports = {
161
162
  __swagger__: { // 用于把此文件内的接口归为同一组的组名
162
163
  name: '文章库-文章管理',
@@ -197,19 +198,27 @@ skybase框架的api定义功能主要有以下几点:
197
198
  }
198
199
  }
199
200
 
201
+ **接口地址**:
200
202
 
201
- **接口地址**:
202
-
203
- * 如果以 / 开始,接口路径则完全等于所编写的地址
204
- * 否则接口路径的规则为:
203
+ - 如果以 / 开始,接口路径则完全等于所编写的地址
204
+ - 否则接口路径的规则为:
205
205
 
206
206
  ## 实操案例
207
- ### mock服务器
208
- * 1. 运行 npm run demo5 //启动mock服务器,前提需要有nodemon全局安装 npm i -g nodemon
209
- * 2. 启动后 访问 http://127.0.0.1:8888/mock/first
210
- * 3. mock定义在 [您的项目]\node_modules\skybase\demo\5-mock-api\model\api\mock.js
211
-
212
- ### mysql探针
213
- * 1. 运行 npm run demo9 //启动mysql探针服务器,前提需要有nodemon全局安装 npm i -g nodemon
214
- * 2. 启动后 访问 http://127.0.0.1:13000/skyapi/probe/mysql
215
- ![demo9](https://github.com/kongnet/skybase/raw/master/screenShot/demo9.png)
207
+
208
+ ### mock 服务器
209
+
210
+ - 1. 运行 npm run demo5 //启动 mock 服务器,前提需要有 nodemon 全局安装 npm i -g nodemon
211
+ - 2. 启动后 访问 http://127.0.0.1:8888/mock/first
212
+ - 3. mock 定义在 [您的项目]\node_modules\skybase\demo\5-mock-api\model\api\mock.js
213
+
214
+ ### mysql 探针
215
+
216
+ - 1. 运行 npm run demo9 //启动 mysql 探针服务器,前提需要有 nodemon 全局安装 npm i -g nodemon
217
+ - 2. 启动后 访问 http://127.0.0.1:13000/skyapi/probe/mysql
218
+ ![demo9](https://github.com/kongnet/skybase/raw/master/screenShot/demo9.png)
219
+
220
+ ### RTS 打点例子
221
+
222
+ > RTS 是时序数据库 https://github.com/kongnet/skyrts
223
+
224
+ ![demo1](https://github.com/kongnet/skybase/raw/master/screenShot/demo1.png)
package/README_demo9.md CHANGED
@@ -1,5 +1,4 @@
1
-
2
- # 加推全栈开发之mysql数据库探针
1
+ # 加推全栈开发之 mysql 数据库探针
3
2
 
4
3
  ## 项目背景
5
4
 
@@ -9,109 +8,138 @@
9
8
 
10
9
  ## 项目实操
11
10
 
12
- - 方式一
11
+ - 方式一
12
+
13
+ 1. 项目地址 [skybase](https://github.com/kongnet/skybase)
14
+ 2. clone 后,安装全局 nodemon,npm i -g nodemon.
15
+ 3. 运行 demo9,npm run demo9,启动数据库探针
16
+ 4. 最终效果
17
+ ![最终效果](demo_img/treemap.gif)
18
+
19
+ - 方式二(推荐方式)
20
+
21
+ - 1. 使用 skyjt 安装 skybase,项目地址: [skyjt](https://github.com/kongnet/sky)
22
+ - 2. 安装 npm i -g skyjt
23
+ - 3. 创建新的文件夹,cd 进入,执行
24
+ - 4. dn init -f // 强制初始化
13
25
 
14
- 1. 项目地址 [skybase](https://github.com/kongnet/skybase)
15
- 2. clone后,安装全局nodemon,npm i -g nodemon.
16
- 3. 运行demo9,npm run demo9,启动数据库探针
17
- 4. 最终效果
18
- ![最终效果](demo_img/treemap.gif)
19
- - 方式二(推荐方式)
20
- * 1. 使用skyjt安装skybase,项目地址: [skyjt](https://github.com/kongnet/sky)
21
- * 2. 安装 npm i -g skyjt
22
- * 3. 创建新的文件夹,cd 进入,执行
23
- * 4. jt init -f // 强制初始化
26
+ ![init](demo_img/init.gif)
24
27
 
25
- ![init](demo_img/init.gif)
28
+ - 5. cd 进创建的目录,执行 **npm i** or **yarn** or **cnpm i**// 安装依赖包
29
+ - 6. 安装全局 nodemon, npm i -g nodemon.
30
+ - 7. 执行 **nodemon** or **npm start** or **node index**
31
+ - 8. 最终效果同方法一 // 数据库探针需要修改 **./config/config.default.js** 中 **mysql** 的配置
26
32
 
27
- * 5. cd进创建的目录,执行 **npm i** or **yarn** or **cnpm i**// 安装依赖包
28
- * 6. 安装全局nodemon, npm i -g nodemon.
29
- * 7. 执行 **nodemon** or **npm start** or **node index**
30
- * 8. 最终效果同方法一 // 数据库探针需要修改 **./config/config.default.js** 中 **mysql** 的配置
31
- - 注意
33
+ - 注意
32
34
 
33
- 请确认数据库链接正常,且有一定的数据.
35
+ 请确认数据库链接正常,且有一定的数据.
34
36
 
35
- 推荐使用方法二
37
+ 推荐使用方法二
36
38
 
37
39
  ## 项目运行流程
38
40
 
39
41
  1. 流程图
40
42
 
41
- ![图](demo_img/process.png)
43
+ ![图](demo_img/process.png)
42
44
 
43
45
  2. 项目结构
44
46
 
45
- ``` js
46
- .
47
- ├── README.md
48
- ├── config // 环境配置
49
- │   ├── config.default.js // 默认环境数据库配置
50
- │   ├── config.dev.js // 开发环境数据库配置
51
- │   ├── config.prod.js // 生产环境数据库配置
52
- │   ├── config.test.js // 测试环境数据库配置
53
- │   └── index.js // 环境判断
54
- ├── index.js //项目执行文件
55
- ├── model //API定义 抽象类所处位置
56
- │   └── api
57
- │   └── skyapi
58
- │   └── probe.js
59
- ├── package.json // 项目配置文件
60
- ├── router
61
- │   └── mysqlProbe.js //路由 渲染数据库数据渲染到模版
62
- ├── service
63
- │   └── mysqlProbe.js //服务 提供处理数据库实际方法
64
- ├── template
65
-    └── treemap-mysql.html // 输出模板
66
- ```
47
+ ```js
48
+ .
49
+ ├── README.md
50
+ ├── config // 环境配置
51
+ │   ├── config.default.js // 默认环境数据库配置
52
+ │   ├── config.dev.js // 开发环境数据库配置
53
+ │   ├── config.prod.js // 生产环境数据库配置
54
+ │   ├── config.test.js // 测试环境数据库配置
55
+ │   └── index.js // 环境判断
56
+ ├── index.js //项目执行文件
57
+ ├── model //API定义 抽象类所处位置
58
+ │   └── api
59
+ │   └── skyapi
60
+ │   └── probe.js
61
+ ├── package.json // 项目配置文件
62
+ ├── router
63
+ │   └── mysqlProbe.js //路由 渲染数据库数据渲染到模版
64
+ ├── service
65
+ │   └── mysqlProbe.js //服务 提供处理数据库实际方法
66
+ ├── template
67
+    └── treemap-mysql.html // 输出模板
68
+ ```
67
69
 
68
70
  3. 方法亮点详解
69
71
 
70
- - service/mysqlProbe.js
71
-
72
- ```js
73
- async function getTableColumnSize () {
74
- let sql = `select
75
- table_schema as 'dbName',
76
- table_name as 'tableName',
77
- table_rows as 'rowCount',
78
- truncate(data_length/1024/1024, 2) as 'dataSize',
79
- truncate(index_length/1024/1024, 2) as 'idxSize',
80
- table_comment as 'tableComment'
81
- from information_schema.tables
82
- order by data_length desc, index_length desc;` // 数据库查询语句
83
- let r = await db.cmd(sql).run() // 异步执行,返回所有数据表的数据
84
- let arr = []
85
- let arrSize = []
86
- let obj = {}
87
- r.forEach(item => {
88
- if (obj[item.dbName]) { // 如果存在节点就插入到children
89
- arr[obj[item.dbName]].children.push({ name: item.tableComment + '\n' + item.tableName + '\n\n' + ((item.rowCount + '').toMoney(2)), value: item.rowCount || 0 })
90
- arrSize[obj[item.dbName]].children.push({ name: item.tableComment + '\n' + item.tableName + '\n\n' + ((item.dataSize + '').toMoney(2)), value: item.dataSize || 0 })
91
- } else { // 如果不存在节点就创建
92
- if (!['performance_schema', 'mysql', 'information_schema', 'sys', 'happyminer_test'].includes(item.dbName)) { // 需要忽略的数据库
93
- // es7方法: includes
94
- // 如 [1, 2, 3].includes(2); // true
95
- // 在es7之前使用indexOf来判断数组中是否包含某个值。
96
- // 如果不确定是否支持,使用一下方法判断
97
- // const isInList = (() => {
98
- // Array.prototype.includes
99
- // ? (arr, value) => arr.includes(value)
100
- // : (arr, value) => arr.some(el => el === value)
101
- // )();
102
- //})
103
- arr.push({ name: item.dbName, children: [] })
104
- arrSize.push({ name: item.dbName, children: [] })
105
- obj[item.dbName] = arr.length - 1
106
- }
107
- }
108
- })
109
- arr.shift()// 因为增加了两条一样的初始数据,所以删除第一条。
110
- // console.log(arr)
111
- return {
112
- code: 0,
113
- data: { tableRow: arr, tableSize: arrSize }
114
- }
115
- }
116
-
117
- ```
72
+ - service/mysqlProbe.js
73
+
74
+ ```js
75
+ async function getTableColumnSize () {
76
+ let sql = `select
77
+ table_schema as 'dbName',
78
+ table_name as 'tableName',
79
+ table_rows as 'rowCount',
80
+ truncate(data_length/1024/1024, 2) as 'dataSize',
81
+ truncate(index_length/1024/1024, 2) as 'idxSize',
82
+ table_comment as 'tableComment'
83
+ from information_schema.tables
84
+ order by data_length desc, index_length desc;` // 数据库查询语句
85
+ let r = await db.cmd(sql).run() // 异步执行,返回所有数据表的数据
86
+ let arr = []
87
+ let arrSize = []
88
+ let obj = {}
89
+ r.forEach(item => {
90
+ if (obj[item.dbName]) {
91
+ // 如果存在节点就插入到children
92
+ arr[obj[item.dbName]].children.push({
93
+ name:
94
+ item.tableComment +
95
+ '\n' +
96
+ item.tableName +
97
+ '\n\n' +
98
+ (item.rowCount + '').toMoney(2),
99
+ value: item.rowCount || 0
100
+ })
101
+ arrSize[obj[item.dbName]].children.push({
102
+ name:
103
+ item.tableComment +
104
+ '\n' +
105
+ item.tableName +
106
+ '\n\n' +
107
+ (item.dataSize + '').toMoney(2),
108
+ value: item.dataSize || 0
109
+ })
110
+ } else {
111
+ // 如果不存在节点就创建
112
+ if (
113
+ ![
114
+ 'performance_schema',
115
+ 'mysql',
116
+ 'information_schema',
117
+ 'sys',
118
+ 'happyminer_test'
119
+ ].includes(item.dbName)
120
+ ) {
121
+ // 需要忽略的数据库
122
+ // es7方法: includes
123
+ // 如 [1, 2, 3].includes(2); // true
124
+ // 在es7之前使用indexOf来判断数组中是否包含某个值。
125
+ // 如果不确定是否支持,使用一下方法判断
126
+ // const isInList = (() => {
127
+ // Array.prototype.includes
128
+ // ? (arr, value) => arr.includes(value)
129
+ // : (arr, value) => arr.some(el => el === value)
130
+ // )();
131
+ //})
132
+ arr.push({ name: item.dbName, children: [] })
133
+ arrSize.push({ name: item.dbName, children: [] })
134
+ obj[item.dbName] = arr.length - 1
135
+ }
136
+ }
137
+ })
138
+ arr.shift() // 因为增加了两条一样的初始数据,所以删除第一条。
139
+ // console.log(arr)
140
+ return {
141
+ code: 0,
142
+ data: { tableRow: arr, tableSize: arrSize }
143
+ }
144
+ }
145
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skybase",
3
- "version": "0.1.90",
3
+ "version": "0.1.91",
4
4
  "description": "sky框架",
5
5
  "main": "index.js",
6
6
  "directories": {
Binary file