mm_os 4.3.7 → 5.0.1

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.
Files changed (231) hide show
  1. package/README.md +102 -504
  2. package/index.js +26 -19
  3. package/lib/os.js +536 -0
  4. package/package.json +60 -84
  5. package/LICENSE +0 -21
  6. package/README_EN.md +0 -505
  7. package/adapter/adapter.js +0 -484
  8. package/adapter/custom_persistence.js +0 -661
  9. package/adapter/mqtt.js +0 -254
  10. package/adapter/socket.js +0 -244
  11. package/adapter/web.js +0 -92
  12. package/adapter/websocket.js +0 -43
  13. package/ai.js +0 -130
  14. package/com/api/README.md +0 -3
  15. package/com/api/com.json +0 -5
  16. package/com/api/config.tpl.json +0 -41
  17. package/com/api/drive.js +0 -732
  18. package/com/api/index.js +0 -201
  19. package/com/api/oauth.js +0 -200
  20. package/com/api/script.tpl.js +0 -32
  21. package/com/cmd/README.md +0 -11
  22. package/com/cmd/com.json +0 -5
  23. package/com/cmd/config.tpl.json +0 -48
  24. package/com/cmd/drive.js +0 -176
  25. package/com/cmd/index.js +0 -287
  26. package/com/cmd/job/config.json +0 -66
  27. package/com/cmd/job/index.js +0 -241
  28. package/com/cmd/job/test.js +0 -188
  29. package/com/cmd/msg.json +0 -48
  30. package/com/cmd/script.tpl.js +0 -12
  31. package/com/db/README.md +0 -3
  32. package/com/db/com.json +0 -5
  33. package/com/db/drive.js +0 -2206
  34. package/com/db/index.js +0 -241
  35. package/com/event/README.md +0 -4
  36. package/com/event/com.json +0 -5
  37. package/com/event/config.tpl.json +0 -20
  38. package/com/event/drive.js +0 -61
  39. package/com/event/index.js +0 -438
  40. package/com/event/script.tpl.js +0 -23
  41. package/com/mqtt/README.md +0 -47
  42. package/com/mqtt/com.json +0 -5
  43. package/com/mqtt/config.tpl.json +0 -42
  44. package/com/mqtt/drive.js +0 -704
  45. package/com/mqtt/index.js +0 -1052
  46. package/com/mqtt/index.test.js +0 -503
  47. package/com/mqtt/script.tpl.js +0 -719
  48. package/com/nav/README.md +0 -2
  49. package/com/nav/com.json +0 -5
  50. package/com/nav/config.tpl.json +0 -84
  51. package/com/nav/drive.js +0 -702
  52. package/com/nav/index.js +0 -228
  53. package/com/nav/tpl/admin_pc/page_channel.vue +0 -305
  54. package/com/nav/tpl/admin_pc/page_config.vue +0 -280
  55. package/com/nav/tpl/admin_pc/page_config_form.vue +0 -194
  56. package/com/nav/tpl/admin_pc/page_default.vue +0 -247
  57. package/com/nav/tpl/admin_pc/page_form.vue +0 -180
  58. package/com/nav/tpl/admin_pc/page_lang.vue +0 -264
  59. package/com/nav/tpl/admin_pc/page_nav.vue +0 -321
  60. package/com/nav/tpl/admin_pc/page_table.vue +0 -296
  61. package/com/nav/tpl/admin_pc/page_type.vue +0 -321
  62. package/com/nav/tpl/admin_pc/page_view.vue +0 -124
  63. package/com/nav/tpl/dev_pc/page_channel.vue +0 -253
  64. package/com/nav/tpl/dev_pc/page_config.vue +0 -253
  65. package/com/nav/tpl/dev_pc/page_default.vue +0 -247
  66. package/com/nav/tpl/dev_pc/page_form.vue +0 -162
  67. package/com/nav/tpl/dev_pc/page_nav.vue +0 -253
  68. package/com/nav/tpl/dev_pc/page_table.vue +0 -247
  69. package/com/nav/tpl/dev_pc/page_type.vue +0 -313
  70. package/com/nav/tpl/home_pc/page_channel.vue +0 -234
  71. package/com/nav/tpl/home_pc/page_default.vue +0 -234
  72. package/com/nav/tpl/home_pc/page_form.vue +0 -137
  73. package/com/nav/tpl/home_pc/page_list.vue +0 -234
  74. package/com/nav/tpl/home_pc/page_nav.vue +0 -221
  75. package/com/nav/tpl/home_pc/page_type.vue +0 -234
  76. package/com/nav/tpl/home_pc/page_view.vue +0 -125
  77. package/com/nav/tpl/home_phone/page_channel.vue +0 -234
  78. package/com/nav/tpl/home_phone/page_default.vue +0 -234
  79. package/com/nav/tpl/home_phone/page_form.vue +0 -137
  80. package/com/nav/tpl/home_phone/page_list.vue +0 -234
  81. package/com/nav/tpl/home_phone/page_nav.vue +0 -237
  82. package/com/nav/tpl/home_phone/page_type.vue +0 -234
  83. package/com/nav/tpl/home_phone/page_view.vue +0 -125
  84. package/com/nav/viewmodel.js +0 -446
  85. package/com/param/README.md +0 -2
  86. package/com/param/com.json +0 -5
  87. package/com/param/config.tpl.json +0 -136
  88. package/com/param/drive.js +0 -502
  89. package/com/param/index.js +0 -158
  90. package/com/param/script.tpl.js +0 -12
  91. package/com/pendant/README.md +0 -3
  92. package/com/pendant/com.json +0 -5
  93. package/com/pendant/config.tpl.json +0 -32
  94. package/com/pendant/drive.js +0 -204
  95. package/com/pendant/index.js +0 -467
  96. package/com/pendant/pendant.html +0 -16
  97. package/com/pendant/script.tpl.js +0 -18
  98. package/com/socket/README.md +0 -47
  99. package/com/socket/com.json +0 -5
  100. package/com/socket/config.tpl.json +0 -12
  101. package/com/socket/drive.js +0 -679
  102. package/com/socket/index.js +0 -402
  103. package/com/socket/script.tpl.js +0 -41
  104. package/com/sql/README.md +0 -3
  105. package/com/sql/com.json +0 -5
  106. package/com/sql/config.tpl.json +0 -74
  107. package/com/sql/drive.js +0 -1328
  108. package/com/sql/index.js +0 -152
  109. package/com/sql/script.tpl.js +0 -47
  110. package/com/static/README.md +0 -2
  111. package/com/static/com.json +0 -5
  112. package/com/static/config.tpl.json +0 -24
  113. package/com/static/drive.js +0 -194
  114. package/com/static/index.js +0 -237
  115. package/com/static/script.tpl.js +0 -28
  116. package/com/task/README.md +0 -3
  117. package/com/task/com.json +0 -5
  118. package/com/task/config.tpl.json +0 -24
  119. package/com/task/drive.js +0 -428
  120. package/com/task/index.js +0 -159
  121. package/com/task/script.tpl.js +0 -40
  122. package/com/template/com.json +0 -5
  123. package/com/template/config.tpl.json +0 -16
  124. package/com/template/drive.js +0 -81
  125. package/com/template/index.js +0 -141
  126. package/com.js +0 -237
  127. package/common/README.md +0 -2
  128. package/common/middleware/web_after/index.js +0 -26
  129. package/common/middleware/web_after/middleware.json +0 -9
  130. package/common/middleware/web_base/index.js +0 -113
  131. package/common/middleware/web_base/middleware.json +0 -19
  132. package/common/middleware/web_before/index.js +0 -33
  133. package/common/middleware/web_before/middleware.json +0 -9
  134. package/common/middleware/web_cors/index.js +0 -87
  135. package/common/middleware/web_cors/middleware.json +0 -24
  136. package/common/middleware/web_error/index.js +0 -131
  137. package/common/middleware/web_error/middleware.json +0 -19
  138. package/common/middleware/web_ip/index.js +0 -15
  139. package/common/middleware/web_ip/middleware.json +0 -14
  140. package/common/middleware/web_logger/index.js +0 -156
  141. package/common/middleware/web_logger/middleware.json +0 -14
  142. package/common/middleware/web_main/index.js +0 -26
  143. package/common/middleware/web_main/middleware.json +0 -9
  144. package/common/middleware/web_static/index.js +0 -73
  145. package/common/middleware/web_static/middleware.json +0 -54
  146. package/common/middleware/web_waf/index.js +0 -395
  147. package/common/middleware/web_waf/middleware.json +0 -13
  148. package/core/app/config.tpl.json +0 -67
  149. package/core/app/index.js +0 -711
  150. package/core/app/script.tpl.js +0 -52
  151. package/core/channel/index.js +0 -899
  152. package/core/channel/matcher.js +0 -585
  153. package/core/com/config.tpl.json +0 -16
  154. package/core/com/index.js +0 -77
  155. package/core/com/script.tpl.js +0 -5
  156. package/core/component/component.js +0 -42
  157. package/core/component/config.tpl.json +0 -63
  158. package/core/component/index.js +0 -273
  159. package/core/component/script.tpl.js +0 -19
  160. package/core/controller/config.tpl.json +0 -14
  161. package/core/controller/index.js +0 -371
  162. package/core/controller/script.tpl.js +0 -27
  163. package/core/factory/config.tpl.json +0 -14
  164. package/core/factory/entity.js +0 -275
  165. package/core/factory/index.js +0 -241
  166. package/core/factory/script.tpl.js +0 -16
  167. package/core/game/bat/index.js +0 -137
  168. package/core/game/bat/world.js +0 -622
  169. package/core/game/config.tpl.json +0 -16
  170. package/core/game/entity_admin.js +0 -230
  171. package/core/game/index.js +0 -186
  172. package/core/handler/config.tpl.json +0 -22
  173. package/core/handler/index.js +0 -181
  174. package/core/handler/script.tpl.js +0 -23
  175. package/core/logic/config.tpl.json +0 -14
  176. package/core/logic/index.js +0 -59
  177. package/core/logic/script.tpl.js +0 -19
  178. package/core/middleware/config.tpl.json +0 -16
  179. package/core/middleware/index.js +0 -117
  180. package/core/middleware/script.tpl.js +0 -37
  181. package/core/mod/config.tpl.json +0 -22
  182. package/core/mod/index.js +0 -136
  183. package/core/mod/script.tpl.js +0 -34
  184. package/core/model/config.tpl.json +0 -219
  185. package/core/model/index.js +0 -272
  186. package/core/model/model.js +0 -27
  187. package/core/model/script.tpl.js +0 -20
  188. package/core/notifier/config.tpl.json +0 -14
  189. package/core/notifier/index.js +0 -77
  190. package/core/notifier/script.tpl.js +0 -20
  191. package/core/plugin/config.tpl.json +0 -36
  192. package/core/plugin/index.js +0 -267
  193. package/core/plugin/script.tpl.js +0 -51
  194. package/core/pusher/config.tpl.json +0 -14
  195. package/core/pusher/index.js +0 -158
  196. package/core/pusher/script.tpl.js +0 -20
  197. package/core/room/bat/index.js +0 -170
  198. package/core/room/bat/room.js +0 -524
  199. package/core/room/config.tpl.json +0 -20
  200. package/core/room/index.js +0 -249
  201. package/core/room/room.js +0 -61
  202. package/core/scene/config.tpl.json +0 -14
  203. package/core/scene/index.js +0 -467
  204. package/core/scene/loop.js +0 -1306
  205. package/core/scene/map.js +0 -28
  206. package/core/scene/script.tpl.js +0 -22
  207. package/core/sender/config.tpl.json +0 -14
  208. package/core/sender/index.js +0 -79
  209. package/core/sender/script.tpl.js +0 -20
  210. package/core/service/config.tpl.json +0 -14
  211. package/core/service/index.js +0 -100
  212. package/core/service/script.tpl.js +0 -25
  213. package/core/store/config.tpl.json +0 -26
  214. package/core/store/index.js +0 -1794
  215. package/core/store/script.tpl.js +0 -22
  216. package/core/system/config.tpl.json +0 -18
  217. package/core/system/index.js +0 -312
  218. package/core/system/script.tpl.js +0 -77
  219. package/core/view/config.tpl.json +0 -14
  220. package/core/view/index.js +0 -91
  221. package/core/view/script.tpl.js +0 -20
  222. package/core/zone/bat/index.js +0 -744
  223. package/core/zone/config.tpl.json +0 -54
  224. package/core/zone/index.js +0 -655
  225. package/core/zone/script.tpl.js +0 -10
  226. package/core/zone/zone_bat.js +0 -136
  227. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +0 -24
  228. package/os.js +0 -53
  229. package/server.js +0 -602
  230. package/ulits/id_gen.js +0 -134
  231. package/ulits/word.js +0 -206
package/README.md CHANGED
@@ -1,504 +1,102 @@
1
- # MM_OS 服务端架构
2
-
3
- [![npm version](https://badge.fury.io/js/mm_os.svg)](https://badge.fury.io/js/mm_os)
4
- [![npm downloads](https://img.shields.io/npm/dm/mm_os.svg)](https://www.npmjs.com/package/mm_os)
5
- [![License](https://img.shields.io/npm/l/mm_os.svg)](https://gitee.com/qiuwenwu91/mm_os/blob/master/LICENSE)
6
-
7
- ## 项目简介
8
-
9
- MM_OS 是一个轻量级的服务端架构,提供了完整的服务端开发框架,包括 Web、WebSocket、MQTT、Socket 等多种通信协议支持,以及丰富的组件和模块。
10
-
11
- **适用场景:**
12
- - **网站建设**:快速构建企业网站、电商平台、内容管理系统
13
- - **小程序**:微信小程序、支付宝小程序等小程序后台服务
14
- - **AI 应用**:AI 接口服务、智能助手、机器学习推理服务
15
- - **物联网 (IOT/AIOT)**:物联网设备管理、传感器数据采集、智能硬件控制
16
- - **游戏服务端**:中小型游戏服务端、实时对战游戏、游戏后台管理
17
-
18
- 支持 **AI、GAME、IOT、AIOT、游戏、物联网、小程序、网站建设** 等多种应用场景。
19
-
20
- ## 核心功能
21
-
22
- - **多协议支持**:Web、WebSocket、MQTT、Socket
23
- - **模块化设计**:应用、模组、中间件、通知器、消息发送器、广播器
24
- - **基础设施**:数据库、缓存、日志、文件管理
25
- - **事件驱动**:基于事件总线的异步处理
26
- - **插件系统**:支持功能扩展
27
-
28
- ## 设计理念:配置与逻辑分离
29
-
30
- MM_OS 框架的核心设计原则是 **配置与逻辑分离**。无论是 `core` 核心模块还是 `com` 公共组件,每个功能模块都遵循统一的结构:
31
-
32
- ### 模块组成
33
-
34
- 每个模块由以下文件组成:
35
-
36
- | 文件类型 | 文件名 | 作用 |
37
- |----------|--------|------|
38
- | **配置文件** | `*.json` | 声明式定义模块的配置参数、元数据 |
39
- | **逻辑文件** | `index.js` | 实现模块的业务逻辑和功能 |
40
-
41
- ### 设计优势
42
-
43
- **1. 声明式配置**
44
- - JSON 文件用于声明式定义模块的元数据和配置项
45
- - 无需编写代码即可完成模块注册和参数配置
46
- - 便于通过可视化工具进行管理和配置
47
-
48
- **2. 逻辑与配置解耦**
49
- - 配置变化无需修改代码,降低维护成本
50
- - 相同的业务逻辑可以通过不同配置复用
51
- - 配置文件可以独立版本管理和部署
52
-
53
- **3. 自动化能力**
54
- - 框架可自动扫描 JSON 配置完成模块注册
55
- - 自动生成文档和配置表单
56
- - 自动进行参数验证,减少重复代码
57
-
58
- **4. 热更新支持**
59
- - 配置文件可热更新,无需重启服务
60
- - 支持动态添加/修改模块配置
61
-
62
- **5. 团队协作优化**
63
- - 配置人员和开发人员可并行工作
64
- - 非开发人员也能参与模块配置
65
- - 统一的配置格式降低沟通成本
66
-
67
- ### 模块类型
68
-
69
- **core 核心模块**:框架基础模块,包括应用(app)、控制器(controller)、模型(model)、逻辑(logic)、插件(plugin)、服务(service)、视图(view)、中间件(middleware)等。
70
-
71
- **com 公共组件**:可复用的公共组件,包括数据库(sql)、缓存(cache)、API管理(api)、事件(event)、任务(task)、静态资源(static)、模板(template)、MQTT、Socket等。
72
-
73
- ## 快速开始
74
-
75
- ### 安装
76
-
77
- ```bash
78
- npm install mm_os
79
- ```
80
-
81
- ### 基本用法
82
-
83
- ```javascript
84
- const { MM_os } = require('mm_os');
85
-
86
- // 设置运行路径
87
- $.run_path = __dirname;
88
-
89
- // 创建服务器实例
90
- const server = new MM_os({
91
- web: {
92
- host: '0.0.0.0',
93
- port: 8000,
94
- socket: true
95
- },
96
- mysql: {
97
- host: '127.0.0.1',
98
- port: 3306,
99
- user: 'root',
100
- password: '123456',
101
- database: 'test'
102
- },
103
- cache: {
104
- way: 'memory'
105
- }
106
- });
107
-
108
- // 启动服务器
109
- async function startServer() {
110
- await server.init();
111
- await server.start();
112
- console.log('服务器启动成功');
113
- }
114
-
115
- startServer();
116
- ```
117
-
118
- ## 项目目录结构
119
-
120
- 基于 MM_OS 框架开发的项目采用标准化目录结构:
121
-
122
- ```
123
- ├── app/ # 应用目录,包含多个独立应用
124
- │ ├── app_name/ # 应用名称
125
- │ │ ├── event_api/ # 事件API目录
126
- │ │ │ ├── web/ # Web路由处理
127
- │ │ │ │ ├── event.json # 事件配置
128
- │ │ │ │ └── main.js # 入口文件
129
- │ │ │ ├── api/ # API接口路由
130
- │ │ │ ├── client/ # 客户端接口路由
131
- │ │ │ └── manage/ # 管理后台路由
132
- │ │ ├── plugin/ # 插件目录
133
- │ │ │ ├── main/ # 主插件(业务逻辑)
134
- │ │ │ │ └── api_{app}_{channel}/{api_name}/
135
- │ │ │ │ ├── api.json # API配置
136
- │ │ │ │ ├── param.json # 参数验证配置
137
- │ │ │ │ └── index.js # API实现
138
- │ │ │ └── server/ # 服务端插件(数据管理)
139
- │ │ ├── pendant/ # 挂件组件目录
140
- │ │ ├── static/ # 静态资源目录
141
- │ │ ├── app.json # 应用配置
142
- │ │ └── index.js # 应用入口
143
- ├── cache/ # 缓存配置目录
144
- ├── com/ # 公共组件目录
145
- ├── config/ # 全局配置目录
146
- │ ├── local.json # 本地配置
147
- │ ├── development.json # 开发环境配置
148
- │ └── production.json # 生产环境配置
149
- ├── db/ # 数据库文件目录(SQLite等)
150
- ├── static/ # 全局静态资源
151
- ├── index.js # 项目入口
152
- └── config.json # 主配置文件
153
- ```
154
-
155
- ## 应用开发
156
-
157
- ### 创建应用
158
-
159
- 每个应用包含独立的业务逻辑,应用配置文件 `app.json`:
160
-
161
- ```json
162
- {
163
- "name": "user",
164
- "version": "1.0",
165
- "title": "用户",
166
- "description": "用于用户身份验证",
167
- "author": "developer",
168
- "scope": "server",
169
- "main": "./index.js",
170
- "func_name": "main",
171
- "sort": 10,
172
- "state": 1,
173
- "sql": {
174
- "way": "mysql",
175
- "mysql": {
176
- "host": "127.0.0.1",
177
- "port": 3306,
178
- "user": "root",
179
- "password": "password",
180
- "database": "example"
181
- }
182
- },
183
- "cache": {
184
- "way": "redis"
185
- }
186
- }
187
- ```
188
-
189
- ### 事件路由配置 (event.json)
190
-
191
- 定义应用的路由规则:
192
-
193
- ```json
194
- {
195
- "/api/user/list": {
196
- "method": "GET",
197
- "title": "获取用户列表",
198
- "auth": false
199
- },
200
- "/api/user/create": {
201
- "method": "POST",
202
- "title": "创建用户",
203
- "auth": true
204
- },
205
- "/user/*": {
206
- "method": "ALL",
207
- "title": "用户页面路由",
208
- "auth": false
209
- }
210
- }
211
- ```
212
-
213
- ### 创建 API 接口
214
-
215
- API 是 MM_OS 框架的核心组件,每个 API 包含三个文件:
216
-
217
- #### 1. api.json - API 配置
218
-
219
- ```json
220
- {
221
- "name": "user_sign_in",
222
- "title": "账户登录",
223
- "description": "用户登录接口,支持账号密码、手机号验证码、社交账号登录",
224
- "path": "/api/user/sign_in",
225
- "type": "api",
226
- "method": "ALL",
227
- "cache": 0,
228
- "param_path": "./param.json",
229
- "check_param": true,
230
- "sort": 1
231
- }
232
- ```
233
-
234
- **api.json 字段说明:**
235
-
236
- | 字段 | 类型 | 必填 | 说明 |
237
- |------|------|------|------|
238
- | name | string | 是 | API 唯一标识 |
239
- | title | string | 是 | API 显示名称 |
240
- | description | string | 否 | API 描述说明 |
241
- | path | string | 是 | 访问路径 |
242
- | type | string | 是 | 类型,固定为 "api" |
243
- | method | string | 是 | 请求方法:GET、POST、ALL |
244
- | cache | number | 否 | 缓存时间(秒),0 表示不缓存 |
245
- | param_path | string | 否 | 参数验证配置文件路径 |
246
- | check_param | boolean | 否 | 是否校验参数 |
247
- | sort | number | 否 | 排序序号 |
248
-
249
- #### 2. param.json - 参数验证配置
250
-
251
- ```json
252
- {
253
- "title": "用户登录验证模型",
254
- "name": "user_sign_in",
255
- "filter": true,
256
- "get": {
257
- "query": ["account", "password", "code"],
258
- "query_required": ["account"]
259
- },
260
- "post": {
261
- "body": ["account", "password", "code", "phone"],
262
- "body_required": ["account"]
263
- },
264
- "list": [
265
- {
266
- "name": "account",
267
- "title": "账号",
268
- "type": "string",
269
- "string": {
270
- "min": 5,
271
- "max": 16,
272
- "format": "username"
273
- }
274
- },
275
- {
276
- "name": "password",
277
- "title": "密码",
278
- "type": "string",
279
- "string": {
280
- "min": 32,
281
- "max": 32,
282
- "format": "password"
283
- }
284
- },
285
- {
286
- "name": "phone",
287
- "title": "手机号码",
288
- "type": "string",
289
- "string": {
290
- "format": "phone",
291
- "range": [11, 11]
292
- }
293
- },
294
- {
295
- "name": "code",
296
- "title": "短信验证码",
297
- "type": "string"
298
- }
299
- ]
300
- }
301
- ```
302
-
303
- **param.json 字段说明:**
304
-
305
- | 字段 | 类型 | 说明 |
306
- |------|------|------|
307
- | title | string | 验证模型名称 |
308
- | name | string | 模型标识 |
309
- | filter | boolean | 是否启用过滤 |
310
- | get.query | array | GET 请求接受的查询参数 |
311
- | get.query_required | array | GET 请求必填参数 |
312
- | post.body | array | POST 请求接受的 body 参数 |
313
- | post.body_required | array | POST 请求必填参数 |
314
- | list | array | 参数验证规则列表 |
315
-
316
- **参数类型支持:**
317
- - `string`:字符串类型,支持 format(phone、email、username、password)、min、max、range
318
- - `number`:数字类型,支持 min、max、range
319
- - `boolean`:布尔类型
320
- - `array`:数组类型
321
- - `object`:对象类型
322
-
323
- #### 3. index.js - API 实现
324
-
325
- ```javascript
326
- /**
327
- * 账户登录接口
328
- * @param {Object} ctx HTTP上下文
329
- * @param {Object} db 数据管理器
330
- * @return {Object} 执行结果
331
- */
332
- async function main(ctx, db) {
333
- // 获取请求参数
334
- var params = ctx.method === "POST" ? ctx.request.body : ctx.request.query;
335
-
336
- // 验证参数
337
- var account = params['account'];
338
- var password = params['password'];
339
-
340
- if (!account) {
341
- return { code: 30001, message: '账号不能为空' };
342
- }
343
- if (!password) {
344
- return { code: 30002, message: '密码不能为空' };
345
- }
346
-
347
- // 查询用户
348
- db.table = "user_account";
349
- db.key = "user_id";
350
- var users = await db.get({ username: account });
351
-
352
- if (users.length === 0) {
353
- return { code: 60001, message: '用户不存在' };
354
- }
355
-
356
- var user = users[0];
357
-
358
- // 验证密码
359
- var pass = (password + user.salt).md5();
360
- if (pass !== user.password) {
361
- return { code: 30003, message: '密码错误' };
362
- }
363
-
364
- // 设置登录状态
365
- ctx.session.user = user;
366
-
367
- // 返回结果
368
- return {
369
- code: 200,
370
- message: '登录成功',
371
- data: {
372
- user_id: user.user_id,
373
- username: user.username,
374
- nickname: user.nickname
375
- }
376
- };
377
- }
378
-
379
- exports.main = main;
380
- ```
381
-
382
- ### 事件处理入口 (main.js)
383
-
384
- ```javascript
385
- // 使用API管理器
386
- var api = $.admin.api('user_web', '网站-用户管理');
387
- api.call('update');
388
-
389
- /**
390
- * @description 接口主函数
391
- * @param {Object} ctx HTTP上下文
392
- * @param {Object} db 数据管理器
393
- * @return {Object} 执行结果
394
- */
395
- async function main(ctx, db) {
396
- // 设置数据库连接
397
- $.push(db, $.admin.sql('sys').db(), true);
398
-
399
- // 使用模板引擎
400
- db.tpl = new $.Tpl();
401
- var bag = db.tpl.viewBag;
402
- bag.path = ctx.path;
403
- bag.query = ctx.query;
404
-
405
- // 执行API路由
406
- return await api.run(ctx, db);
407
- }
408
-
409
- exports.main = main;
410
- ```
411
-
412
- ## 配置说明
413
-
414
- MM_OS 支持多种配置选项,包括:
415
-
416
- - **web**:Web 服务器配置
417
- - **mysql**:MySQL 数据库配置
418
- - **sqlite**:SQLite 数据库配置
419
- - **cache**:缓存配置(`way` 字段指定缓存方式:`memory`、`redis`、`mongodb`)
420
- - **redis**:Redis 缓存配置
421
- - **mongodb**:MongoDB 配置
422
- - **mqtt**:MQTT 服务器配置
423
- - **socket**:Socket 服务器配置
424
-
425
- ### 配置文件示例
426
-
427
- ```json
428
- {
429
- "name": "mm_os",
430
- "title": "服务端系统",
431
- "log": {
432
- "level": "debug",
433
- "file": true
434
- },
435
- "web": {
436
- "state": true,
437
- "host": "0.0.0.0",
438
- "port": 8000,
439
- "socket": false,
440
- "cos": {
441
- "status": true,
442
- "origin": "*"
443
- },
444
- "static": {
445
- "state": 1,
446
- "root": "./static"
447
- }
448
- },
449
- "mysql": {
450
- "host": "127.0.0.1",
451
- "port": 3306,
452
- "user": "root",
453
- "password": "password",
454
- "database": "example"
455
- },
456
- "cache": {
457
- "way": "redis"
458
- },
459
- "redis": {
460
- "host": "localhost",
461
- "port": 6379,
462
- "password": "",
463
- "database": 0
464
- }
465
- }
466
- ```
467
-
468
- ## 全局对象
469
-
470
- MM_OS 提供了丰富的全局对象供开发使用:
471
-
472
- ### `$` 对象
473
-
474
- | 属性 | 说明 |
475
- |------|------|
476
- | `$.sql` | 数据库操作对象 |
477
- | `$.cache` | 缓存操作对象 |
478
- | `$.log` | 日志对象 |
479
- | `$.admin` | 管理员对象 |
480
- | `$.eventer` | 事件总线 |
481
- | `$.config` | 配置管理器 |
482
- | `$.Tpl` | 模板引擎类 |
483
- | `$.ret` | 返回结果工具 |
484
- | `$.run_path` | 当前运行路径 |
485
-
486
- ### `$.ret` 返回工具
487
-
488
- ```javascript
489
- // 成功返回
490
- return $.ret.body(data); // { code: 200, message: 'success', data: data }
491
-
492
- // 错误返回
493
- return $.ret.error(code, message); // { code: code, message: message }
494
- ```
495
-
496
- ## 开发指南
497
-
498
- 1. **安装依赖**:`npm install`
499
- 2. **开发调试**:`npm run dev`
500
- 3. **运行测试**:`npm run test`
501
-
502
- ## 许可证
503
-
504
- ISC
1
+ # mm_os
2
+
3
+ 这是 OS 系统模块,超级美眉服务端的核心框架。负责初始化日志、注册管理、加载输入 / 输出适配器、缓存与数据库、应用加载器,并驱动应用与插件的完整生命周期。
4
+
5
+ ## 功能特点
6
+
7
+ - `OS` 类:初始化日志、管理、适配器、存储与应用加载器
8
+ - 输入适配器:web / mqtt / socket / websocket
9
+ - 输出适配器:redis / mongodb / mysql / sqlite / jsondb / file
10
+ - 工具:lang / tpl / ret
11
+ - 管理:service / handle / event / api / param / dao / templete / pendant / timer / statics
12
+ - `Loader` 类:扫描应用目录,加载应用与插件的配置、生命周期和资源清单
13
+ - `osAdmin(scope, config)` 按作用域缓存系统实例,相同 `scope` 返回同一实例
14
+
15
+ ## 安装
16
+
17
+ ```bash
18
+ npm install mm_os
19
+ ```
20
+
21
+ ## 快速开始
22
+
23
+ ```javascript
24
+ const { osAdmin } = require('mm_os');
25
+
26
+ const os = osAdmin('os', {
27
+ web: { port: 8080 },
28
+ cache: { type: 'redis' },
29
+ db: { type: 'mysql' }
30
+ });
31
+
32
+ (async () => {
33
+ await os.init();
34
+ await os.start();
35
+ })();
36
+ ```
37
+
38
+ ## API 文档
39
+
40
+ ### `osAdmin(scope, config)`
41
+
42
+ 获取(或创建)指定作用域的系统实例,相同 `scope` 返回同一实例。
43
+
44
+ - `scope`:作用域名称,缺省为 `'os'`
45
+ - `config`:系统配置
46
+ - `in_adapters`:输入适配器列表,默认 `['web', 'mqtt', 'socket', 'websocket']`
47
+ - `out_adapters`:输出适配器列表,默认 `['redis', 'mongodb', 'mysql', 'sqlite', 'jsondb', 'file']`
48
+ - `tools`:工具列表,默认 `['lang', 'tpl', 'ret', 'service', 'handle']`
49
+ - `admins`:管理列表,默认 `['event', 'api', 'param', 'sql', 'templete', 'pendant', 'timer', 'statics']`
50
+ - `cache` / `db`:缓存与数据库配置
51
+ - `web` / `mqtt` / `socket` / `websocket`:各入站适配器端口配置
52
+
53
+ ### `OS`
54
+
55
+ | 方法 | 说明 |
56
+ | --- | --- |
57
+ | `onInit()` | 生命周期初始化钩子,依次初始化日志、管理、适配器、存储与加载器 |
58
+ | `initLogger()` | 初始化日志记录器 |
59
+ | `log(type, msg, ...args)` | 输出日志 |
60
+ | `reg(name, admin)` | 注册管理对象 |
61
+ | `require(mod_name)` | 加载模块 |
62
+ | `initAdapter()` | 初始化输入 / 输出适配器并初始化事件总线 |
63
+ | `initTools()` | 初始化工具 |
64
+ | `initAdmins()` | 初始化管理 |
65
+ | `initpStorage()` | 初始化缓存与数据库 |
66
+ | `initLoader()` | 初始化应用加载器 |
67
+ | `initEventBus()` | 初始化事件总线 |
68
+ | `start()` | 启动全部适配器、缓存、数据库与应用 |
69
+
70
+ OS 实例属性:`admins`、`in_adapters`、`out_adapters`、`cache`、`sql`、`logger`、`loader`、`eventer`。
71
+
72
+ ### `Loader`
73
+
74
+ | 方法 | 说明 |
75
+ | --- | --- |
76
+ | `load()` | 扫描并加载应用根目录下的全部应用 |
77
+ | `startAll()` | 启动全部应用 |
78
+ | `stopAll()` | 停止全部应用 |
79
+ | `get(name)` | 获取应用驱动 |
80
+ | `has(name)` | 判断应用是否存在 |
81
+ | `list()` | 获取应用驱动列表 |
82
+ | `reload(name)` | 重启应用 |
83
+ | `del(name)` | 删除应用 |
84
+ | `clear()` | 清空应用列表与资源管理器缓存 |
85
+
86
+ ### `admin`
87
+
88
+ 内置的 `Admin` 实例,已注册 `OS` 类。
89
+
90
+ ## 运行示例
91
+
92
+ ```bash
93
+ npm run demo
94
+ ```
95
+
96
+ ## 许可证
97
+
98
+ ISC License
99
+
100
+ ## 作者
101
+
102
+ 邱文武
package/index.js CHANGED
@@ -1,19 +1,26 @@
1
- const {
2
- Server
3
- } = require('./server.js');
4
-
5
- /**
6
- * 操作系统核心类
7
- */
8
- class MM_os {
9
- /**
10
- * 构造函数
11
- * @param {object} config 配置对象
12
- */
13
- constructor(config) {
14
- $.server = new Server(config);
15
- return $.server;
16
- }
17
- }
18
-
19
- exports.MM_os = MM_os;
1
+ const OS = require('./lib/os');
2
+ const { Loader } = require('mm_loader');
3
+ const Admin = require('mm_corejs').Admin;
4
+
5
+ let admin = new Admin();
6
+ admin.setClass(OS);
7
+
8
+ /**
9
+ * 获取系统实例
10
+ * @param {string} scope 作用域
11
+ * @param {Object} config 配置参数
12
+ * @returns {OS} 系统实例
13
+ */
14
+ function osAdmin(scope, config) {
15
+ if (!scope) {
16
+ scope = 'os';
17
+ }
18
+ return admin.get(scope, config);
19
+ }
20
+
21
+ module.exports = {
22
+ OS,
23
+ Loader,
24
+ admin,
25
+ osAdmin
26
+ };