mm_os 4.3.6 → 5.0.0

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 (234) hide show
  1. package/README.md +101 -504
  2. package/index.js +26 -19
  3. package/lib/loader.js +787 -0
  4. package/lib/os.js +369 -0
  5. package/package.json +55 -80
  6. package/LICENSE +0 -21
  7. package/README_EN.md +0 -505
  8. package/adapter/adapter.js +0 -484
  9. package/adapter/custom_persistence.js +0 -661
  10. package/adapter/mqtt.js +0 -254
  11. package/adapter/socket.js +0 -244
  12. package/adapter/web.js +0 -92
  13. package/adapter/websocket.js +0 -43
  14. package/ai.js +0 -130
  15. package/com/api/README.md +0 -3
  16. package/com/api/com.json +0 -5
  17. package/com/api/config.tpl.json +0 -41
  18. package/com/api/drive.js +0 -732
  19. package/com/api/index.js +0 -201
  20. package/com/api/oauth.js +0 -200
  21. package/com/api/script.tpl.js +0 -32
  22. package/com/cmd/README.md +0 -11
  23. package/com/cmd/com.json +0 -5
  24. package/com/cmd/config.tpl.json +0 -48
  25. package/com/cmd/drive.js +0 -176
  26. package/com/cmd/index.js +0 -287
  27. package/com/cmd/job/config.json +0 -66
  28. package/com/cmd/job/index.js +0 -241
  29. package/com/cmd/job/test.js +0 -188
  30. package/com/cmd/msg.json +0 -48
  31. package/com/cmd/script.tpl.js +0 -12
  32. package/com/db/README.md +0 -3
  33. package/com/db/com.json +0 -5
  34. package/com/db/drive.js +0 -2206
  35. package/com/db/index.js +0 -241
  36. package/com/event/README.md +0 -4
  37. package/com/event/com.json +0 -5
  38. package/com/event/config.tpl.json +0 -20
  39. package/com/event/drive.js +0 -61
  40. package/com/event/index.js +0 -438
  41. package/com/event/script.tpl.js +0 -23
  42. package/com/mqtt/README.md +0 -47
  43. package/com/mqtt/com.json +0 -5
  44. package/com/mqtt/config.tpl.json +0 -42
  45. package/com/mqtt/drive.js +0 -696
  46. package/com/mqtt/index.js +0 -1017
  47. package/com/mqtt/index.test.js +0 -503
  48. package/com/mqtt/mm_mqtt.js +0 -446
  49. package/com/mqtt/script.tpl.js +0 -719
  50. package/com/nav/README.md +0 -2
  51. package/com/nav/com.json +0 -5
  52. package/com/nav/config.tpl.json +0 -84
  53. package/com/nav/drive.js +0 -702
  54. package/com/nav/index.js +0 -228
  55. package/com/nav/tpl/admin_pc/page_channel.vue +0 -305
  56. package/com/nav/tpl/admin_pc/page_config.vue +0 -280
  57. package/com/nav/tpl/admin_pc/page_config_form.vue +0 -194
  58. package/com/nav/tpl/admin_pc/page_default.vue +0 -247
  59. package/com/nav/tpl/admin_pc/page_form.vue +0 -180
  60. package/com/nav/tpl/admin_pc/page_lang.vue +0 -264
  61. package/com/nav/tpl/admin_pc/page_nav.vue +0 -321
  62. package/com/nav/tpl/admin_pc/page_table.vue +0 -296
  63. package/com/nav/tpl/admin_pc/page_type.vue +0 -321
  64. package/com/nav/tpl/admin_pc/page_view.vue +0 -124
  65. package/com/nav/tpl/dev_pc/page_channel.vue +0 -253
  66. package/com/nav/tpl/dev_pc/page_config.vue +0 -253
  67. package/com/nav/tpl/dev_pc/page_default.vue +0 -247
  68. package/com/nav/tpl/dev_pc/page_form.vue +0 -162
  69. package/com/nav/tpl/dev_pc/page_nav.vue +0 -253
  70. package/com/nav/tpl/dev_pc/page_table.vue +0 -247
  71. package/com/nav/tpl/dev_pc/page_type.vue +0 -313
  72. package/com/nav/tpl/home_pc/page_channel.vue +0 -234
  73. package/com/nav/tpl/home_pc/page_default.vue +0 -234
  74. package/com/nav/tpl/home_pc/page_form.vue +0 -137
  75. package/com/nav/tpl/home_pc/page_list.vue +0 -234
  76. package/com/nav/tpl/home_pc/page_nav.vue +0 -221
  77. package/com/nav/tpl/home_pc/page_type.vue +0 -234
  78. package/com/nav/tpl/home_pc/page_view.vue +0 -125
  79. package/com/nav/tpl/home_phone/page_channel.vue +0 -234
  80. package/com/nav/tpl/home_phone/page_default.vue +0 -234
  81. package/com/nav/tpl/home_phone/page_form.vue +0 -137
  82. package/com/nav/tpl/home_phone/page_list.vue +0 -234
  83. package/com/nav/tpl/home_phone/page_nav.vue +0 -237
  84. package/com/nav/tpl/home_phone/page_type.vue +0 -234
  85. package/com/nav/tpl/home_phone/page_view.vue +0 -125
  86. package/com/nav/viewmodel.js +0 -446
  87. package/com/param/README.md +0 -2
  88. package/com/param/com.json +0 -5
  89. package/com/param/config.tpl.json +0 -136
  90. package/com/param/drive.js +0 -502
  91. package/com/param/index.js +0 -158
  92. package/com/param/script.tpl.js +0 -12
  93. package/com/pendant/README.md +0 -3
  94. package/com/pendant/com.json +0 -5
  95. package/com/pendant/config.tpl.json +0 -32
  96. package/com/pendant/drive.js +0 -204
  97. package/com/pendant/index.js +0 -467
  98. package/com/pendant/pendant.html +0 -16
  99. package/com/pendant/script.tpl.js +0 -18
  100. package/com/socket/README.md +0 -47
  101. package/com/socket/com.json +0 -5
  102. package/com/socket/config.tpl.json +0 -12
  103. package/com/socket/drive.js +0 -679
  104. package/com/socket/index.js +0 -402
  105. package/com/socket/script.tpl.js +0 -41
  106. package/com/sql/README.md +0 -3
  107. package/com/sql/com.json +0 -5
  108. package/com/sql/config.tpl.json +0 -74
  109. package/com/sql/drive.js +0 -1283
  110. package/com/sql/index.js +0 -152
  111. package/com/sql/script.tpl.js +0 -47
  112. package/com/static/README.md +0 -2
  113. package/com/static/com.json +0 -5
  114. package/com/static/config.tpl.json +0 -24
  115. package/com/static/drive.js +0 -194
  116. package/com/static/index.js +0 -237
  117. package/com/static/script.tpl.js +0 -28
  118. package/com/task/README.md +0 -3
  119. package/com/task/com.json +0 -5
  120. package/com/task/config.tpl.json +0 -24
  121. package/com/task/drive.js +0 -428
  122. package/com/task/index.js +0 -159
  123. package/com/task/script.tpl.js +0 -40
  124. package/com/template/com.json +0 -5
  125. package/com/template/config.tpl.json +0 -16
  126. package/com/template/drive.js +0 -81
  127. package/com/template/index.js +0 -141
  128. package/com.js +0 -237
  129. package/common/README.md +0 -2
  130. package/common/middleware/web_after/index.js +0 -26
  131. package/common/middleware/web_after/middleware.json +0 -9
  132. package/common/middleware/web_base/index.js +0 -113
  133. package/common/middleware/web_base/middleware.json +0 -19
  134. package/common/middleware/web_before/index.js +0 -33
  135. package/common/middleware/web_before/middleware.json +0 -9
  136. package/common/middleware/web_cors/index.js +0 -87
  137. package/common/middleware/web_cors/middleware.json +0 -24
  138. package/common/middleware/web_error/index.js +0 -131
  139. package/common/middleware/web_error/middleware.json +0 -19
  140. package/common/middleware/web_ip/index.js +0 -15
  141. package/common/middleware/web_ip/middleware.json +0 -14
  142. package/common/middleware/web_logger/index.js +0 -156
  143. package/common/middleware/web_logger/middleware.json +0 -14
  144. package/common/middleware/web_main/index.js +0 -26
  145. package/common/middleware/web_main/middleware.json +0 -9
  146. package/common/middleware/web_static/index.js +0 -73
  147. package/common/middleware/web_static/middleware.json +0 -54
  148. package/common/middleware/web_waf/index.js +0 -385
  149. package/common/middleware/web_waf/middleware.json +0 -13
  150. package/core/app/config.tpl.json +0 -67
  151. package/core/app/index.js +0 -710
  152. package/core/app/script.tpl.js +0 -52
  153. package/core/channel/index.js +0 -899
  154. package/core/channel/matcher.js +0 -585
  155. package/core/com/config.tpl.json +0 -16
  156. package/core/com/index.js +0 -77
  157. package/core/com/script.tpl.js +0 -5
  158. package/core/component/component.js +0 -42
  159. package/core/component/config.tpl.json +0 -63
  160. package/core/component/index.js +0 -273
  161. package/core/component/script.tpl.js +0 -19
  162. package/core/controller/config.tpl.json +0 -14
  163. package/core/controller/index.js +0 -371
  164. package/core/controller/script.tpl.js +0 -27
  165. package/core/factory/config.tpl.json +0 -14
  166. package/core/factory/entity.js +0 -275
  167. package/core/factory/index.js +0 -241
  168. package/core/factory/script.tpl.js +0 -16
  169. package/core/game/bat/index.js +0 -137
  170. package/core/game/bat/world.js +0 -622
  171. package/core/game/config.tpl.json +0 -16
  172. package/core/game/entity_admin.js +0 -230
  173. package/core/game/index.js +0 -186
  174. package/core/handler/config.tpl.json +0 -22
  175. package/core/handler/index.js +0 -181
  176. package/core/handler/script.tpl.js +0 -23
  177. package/core/logic/config.tpl.json +0 -14
  178. package/core/logic/index.js +0 -59
  179. package/core/logic/script.tpl.js +0 -19
  180. package/core/middleware/config.tpl.json +0 -16
  181. package/core/middleware/index.js +0 -117
  182. package/core/middleware/script.tpl.js +0 -37
  183. package/core/mod/config.tpl.json +0 -22
  184. package/core/mod/index.js +0 -136
  185. package/core/mod/script.tpl.js +0 -34
  186. package/core/model/config.tpl.json +0 -219
  187. package/core/model/index.js +0 -272
  188. package/core/model/model.js +0 -27
  189. package/core/model/script.tpl.js +0 -20
  190. package/core/notifier/config.tpl.json +0 -14
  191. package/core/notifier/index.js +0 -77
  192. package/core/notifier/script.tpl.js +0 -20
  193. package/core/plugin/config.tpl.json +0 -36
  194. package/core/plugin/index.js +0 -297
  195. package/core/plugin/script.tpl.js +0 -51
  196. package/core/pusher/config.tpl.json +0 -14
  197. package/core/pusher/index.js +0 -158
  198. package/core/pusher/script.tpl.js +0 -20
  199. package/core/room/bat/index.js +0 -170
  200. package/core/room/bat/room.js +0 -524
  201. package/core/room/config.tpl.json +0 -20
  202. package/core/room/index.js +0 -249
  203. package/core/room/room.js +0 -61
  204. package/core/scene/config.tpl.json +0 -14
  205. package/core/scene/index.js +0 -467
  206. package/core/scene/loop.js +0 -1306
  207. package/core/scene/map.js +0 -28
  208. package/core/scene/script.tpl.js +0 -22
  209. package/core/sender/config.tpl.json +0 -14
  210. package/core/sender/index.js +0 -79
  211. package/core/sender/script.tpl.js +0 -20
  212. package/core/service/config.tpl.json +0 -14
  213. package/core/service/index.js +0 -100
  214. package/core/service/script.tpl.js +0 -25
  215. package/core/store/config.tpl.json +0 -26
  216. package/core/store/index.js +0 -1794
  217. package/core/store/script.tpl.js +0 -22
  218. package/core/store/sql.js +0 -1488
  219. package/core/system/config.tpl.json +0 -18
  220. package/core/system/index.js +0 -312
  221. package/core/system/script.tpl.js +0 -77
  222. package/core/view/config.tpl.json +0 -14
  223. package/core/view/index.js +0 -91
  224. package/core/view/script.tpl.js +0 -20
  225. package/core/zone/bat/index.js +0 -744
  226. package/core/zone/config.tpl.json +0 -54
  227. package/core/zone/index.js +0 -655
  228. package/core/zone/script.tpl.js +0 -10
  229. package/core/zone/zone_bat.js +0 -136
  230. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +0 -24
  231. package/os.js +0 -53
  232. package/server.js +0 -595
  233. package/ulits/id_gen.js +0 -134
  234. package/ulits/word.js +0 -206
package/README.md CHANGED
@@ -1,504 +1,101 @@
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 / service / handle / event / api / param / sql / templete / pendant / timer / statics
11
+ - `Loader` 类:扫描应用目录,加载应用与插件的配置、生命周期和资源清单
12
+ - `osAdmin(scope, config)` 按作用域缓存系统实例,相同 `scope` 返回同一实例
13
+
14
+ ## 安装
15
+
16
+ ```bash
17
+ npm install mm_os
18
+ ```
19
+
20
+ ## 快速开始
21
+
22
+ ```javascript
23
+ const { osAdmin } = require('mm_os');
24
+
25
+ const os = osAdmin('os', {
26
+ web: { port: 8080 },
27
+ cache: { type: 'redis' },
28
+ db: { type: 'mysql' }
29
+ });
30
+
31
+ (async () => {
32
+ await os.init();
33
+ await os.start();
34
+ })();
35
+ ```
36
+
37
+ ## API 文档
38
+
39
+ ### `osAdmin(scope, config)`
40
+
41
+ 获取(或创建)指定作用域的系统实例,相同 `scope` 返回同一实例。
42
+
43
+ - `scope`:作用域名称,缺省为 `'os'`
44
+ - `config`:系统配置
45
+ - `in_adapters`:输入适配器列表,默认 `['web', 'mqtt', 'socket', 'websocket']`
46
+ - `out_adapters`:输出适配器列表,默认 `['redis', 'mongodb', 'mysql', 'sqlite', 'jsondb', 'file']`
47
+ - `tools`:工具列表,默认 `['lang', 'tpl', 'ret', 'service', 'handle']`
48
+ - `admins`:管理列表,默认 `['event', 'api', 'param', 'sql', 'templete', 'pendant', 'timer', 'statics']`
49
+ - `cache` / `db`:缓存与数据库配置
50
+ - `web` / `mqtt` / `socket` / `websocket`:各入站适配器端口配置
51
+
52
+ ### `OS`
53
+
54
+ | 方法 | 说明 |
55
+ | --- | --- |
56
+ | `onInit()` | 生命周期初始化钩子,依次初始化日志、管理、适配器、存储与加载器 |
57
+ | `initLogger()` | 初始化日志记录器 |
58
+ | `log(type, msg, ...args)` | 输出日志 |
59
+ | `reg(name, admin)` | 注册管理对象 |
60
+ | `require(mod_name)` | 加载模块 |
61
+ | `initAdapter()` | 初始化输入 / 输出适配器并初始化事件总线 |
62
+ | `initTools()` | 初始化工具 |
63
+ | `initAdmins()` | 初始化管理 |
64
+ | `initpStorage()` | 初始化缓存与数据库 |
65
+ | `initLoader()` | 初始化应用加载器 |
66
+ | `initEventBus()` | 初始化事件总线 |
67
+ | `start()` | 启动全部适配器、缓存、数据库与应用 |
68
+
69
+ OS 实例属性:`admins`、`in_adapters`、`out_adapters`、`cache`、`sql`、`logger`、`loader`、`eventer`。
70
+
71
+ ### `Loader`
72
+
73
+ | 方法 | 说明 |
74
+ | --- | --- |
75
+ | `load()` | 扫描并加载应用根目录下的全部应用 |
76
+ | `startAll()` | 启动全部应用 |
77
+ | `stopAll()` | 停止全部应用 |
78
+ | `get(name)` | 获取应用驱动 |
79
+ | `has(name)` | 判断应用是否存在 |
80
+ | `list()` | 获取应用驱动列表 |
81
+ | `reload(name)` | 重启应用 |
82
+ | `del(name)` | 删除应用 |
83
+ | `clear()` | 清空应用列表与资源管理器缓存 |
84
+
85
+ ### `admin`
86
+
87
+ 内置的 `Admin` 实例,已注册 `OS` 类。
88
+
89
+ ## 运行示例
90
+
91
+ ```bash
92
+ npm run demo
93
+ ```
94
+
95
+ ## 许可证
96
+
97
+ ISC License
98
+
99
+ ## 作者
100
+
101
+ 邱文武
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('./lib/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
+ };