# 自由人系统 **Repository Path**: qiuwenwu91/mm_oss ## Basic Information - **Project Name**: 自由人系统 - **Description**: 用于搭建web应用程序,轻量、稳定、迅速、高并发,支持物联网MQTT和AI,快速构建好用网站、小程序、公众号 - **Primary Language**: NodeJS - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-05-13 - **Last Updated**: 2026-09-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MM-OS 这是一个基于 Node.js 开发的web应用框架,它基于 Node.js 开发,使用了koa做底层框架,支持 RESTful API 接口的开发。 ## 核心功能 - 模块化设计:采用了模块化架构,这有利于代码复用和维护。 - 模板引擎:使用了art-template模板驱动,支持前端渲染。 - 多语言支持:采用i18n.js多国语机制,具备国际化能力,可快速搭建多国语网站。 - 插件系统:支持功能扩展,可通过热拔插的方式给系统增加插件,拓展功能。 - 静态资源管理:系统有完善的静态资源(CSS、JS、图片等)管理结构。 - 事件驱动架构:采用了事件驱动设计,可让两个程序不通过改写的方式实现穿插、控制,让功能低耦合方式运作。 - 数据库支持:支持多种数据库,如MySQL、MongoDB等。 - 缓存机制:有完善的缓存机制 内存+redis,可提高系统响应速度。 - 权限管理:有完善的权限管理机制,可根据用户角色和权限进行访问控制。 - 日志管理:有完善的日志管理机制,可记录系统运行日志和用户操作日志。 - 安全防护:有完善的安全防护机制,如防止SQL注入、跨站脚本攻击等。 - API文档:有自动生成API文档的功能,方便开发者查看和使用API。 - 前后端分离:支持前后端分离开发,前端和后端可以独立开发和维护。 - 物联网开发:支持物联网开发,集成MQTT通讯模块,可快速实现物联网设备与系统的交互。 - 任务调度:有完善的任务调度机制,可多样化定时执行任务。 - API统一管理:有统一的API管理机制,方便开发者管理和调用API。 - 轻量高效:系统设计简洁,性能优异,可快速响应请求,可作为微服务架构下的单一服务。 ### 为什么会用 NodeJs开发呢?有以下几点 + 高性能:Node.js 是基于 Chrome V8 引擎构建的,这意味着它具有高效的代码执行性能。V8 引擎将 JavaScript 代码编译成机器码,从而提高了执行速度。 + 事件驱动和非阻塞 I/O:Node.js 使用了事件驱动和非阻塞 I/O 模型,这使得它在处理大量并发请求时既轻量又高效。这种模型特别适合数据密集型实时应用,如在线游戏、聊天应用等。 + 庞大的生态系统:Node.js 拥有一个庞大的包管理器生态系统——npm(Node Package Manager),它是世界上最大的开源库生态系统之一。开发者可以通过 npm 轻松地安装、分享和管理各种模块和工具,大大提高了开发效率。 + 跨平台性:Node.js 允许 JavaScript 程序在多种平台上运行,包括桌面、命令行终端、手机、平板电脑甚至嵌入式系统。这种跨平台性极大地扩展了 JavaScript 的应用范围。 + 促进了前端工程化:Node.js 的出现使得 JavaScript 不再仅仅是浏览器中运行的脚本语言,而是可以作为一种全栈开发的编程语言。这为前端工程化的发展提供了强有力的支持,同时也推动了前后端分离的架构模式。 + 易于学习:对于熟悉 JavaScript 的前端开发者来说,Node.js 的学习曲线相对平缓,因为它使用的是同一种语言,这降低了学习和转换成本。 + 支持实时通信:Node.js 的非阻塞特性使其非常适合实现实时通信功能,如 WebSockets 和 Server-Sent Events,这对于构建交互式和实时 web 应用至关重要。 ### 安装文档 + 安装教程:https://docs.qq.com/aio/DSUdIT09OR2NRSFpC?p=mCMNnkjTrVT20ggxGSNx8n ### Node 版本 nodejs >= 18.0 ### 快速开始 + 1、先在www—wwwroot根目录创建好项目目录(文件名字,根据自己的喜好)不能带中文 + 2、然后点击数据库(添加一个空白数据库) + 3、一切都准备好之后,把系统源码文件解压至刚创建的项目的根目录里面 + 4、返回网站,点击Node项目,然后添加项目 + 5、端口填写8000端口 启动的方式要选择 start:node --max-old-space-size=102400 index.js + 6、全部添加好之后,保存然后启动 + 7、直接网站输入域名进行 安装 ### 网站后台演示 + [小程序网站后台](https://demo.dsary.com/) + 账号:admin 密码:admin123 ### 演示小程序 Q群 ![小程序](/static/img/copyright/qrcode_mini_app.jpg) ![输入图片说明](/static/img/copyright/qrcode_qq.png) ### 快速联系到我们 + 官方Q群:667894510(加入群,一起讨论新功能的增加) + [源码下载网站](https://www.dsary.com)/ ### 插件开发指南 本系统支持插件扩展,您可以开发自己的插件来扩展系统功能。 #### 插件目录结构 ``` app/tool/plugin/your-plugin/ ├── api_tool_client/ # 服务端API │ └── your-plugin/ │ ├── api.json # API配置 │ ├── index.js # 业务逻辑 │ └── param.json # 参数校验 ├── api_tool_web/ # Web端 │ └── index/ │ ├── api.json # 页面路由 │ ├── index.js # 控制器 │ └── index.html # 页面模板 └── plugin.json # 插件配置 ``` #### 开发步骤 1. 创建插件目录: ```bash mkdir -p app/tool/plugin/your-plugin ``` 2. 配置 plugin.json: ```json { "app": "tool", "name": "your-plugin", "title": "插件名称", "description": "插件描述", "version": "1.0.0", "author": "your-name", "state": 1 } ``` 3. 开发服务端API: - 配置 api.json 定义接口 - 在 index.js 中实现业务逻辑 - 在 param.json 中定义参数校验 4. 开发Web界面: - 创建 index.html 页面模板 - 配置 api.json 定义路由 - 在 index.js 中实现控制逻辑 ### 事件配置说明 系统支持事件驱动开发,您可以通过配置事件来实现功能的解耦和扩展。 #### 事件配置结构 ```json { "name": "event_name", // 事件名称 "title": "事件标题", // 事件说明 "description": "事件描述", // 详细描述 "main": "./main.js", // 事件处理文件 "state": 1, // 是否启用 "stage": "main", // 触发时态:main/before/after "sort": 100, // 执行顺序 "end": false // 是否结束事件链 } ``` #### 事件处理示例 ```javascript // main.js async function main(ctx, db) { // 事件处理逻辑 return $.ret.obj({ success: true, data: {} }); } exports.main = main; ``` #### 事件触发时态 - main: 触发所有监听该事件的处理器 - before: 触发前的预处理 - after: 触发后的补充处理 #### 使用建议 1. 合理设置执行顺序 2. 选择适当的触发模式 3. 做好错误处理 4. 保持处理器的独立性 ### API 配置说明 系统支持灵活的 API 配置,通过 api.json 文件来定义接口的行为和参数校验。 #### API 配置结构 ```json { "path": "/api/tool/your-plugin", // API路径 "name": "tool_your_plugin", // API名称 "title": "接口标题", // 接口说明 "description": "接口描述", // 详细描述 "main": "./index.js", // 处理文件 "method": "ALL", // 请求方法:GET/POST/ALL "scope": true, // 是否开放访问 "cache": 0, // 缓存时间(分钟) "state": 1, // 是否启用 "client_cache": false, // 是否客户端缓存 "param_path": "./param.json", // 参数校验配置 "oauth": { // 授权配置 "signIn": true, // 是否需要登录 "gm": 3 // 权限等级 } } ``` #### 参数校验配置 ```json { "filter": true, // 是否启用过滤 "main": "", // 校验脚本 "post": { // POST请求配置 "query": [], // 查询参数 "query_required": [], // 必填查询参数 "body": ["param1", "param2"], // 请求体参数 "body_required": ["param1"] // 必填请求体参数 }, "list": [{ // 参数定义列表 "name": "param1", // 参数名 "title": "参数1", // 参数说明 "type": "string", // 参数类型 "string": { // 字符串类型配置 "format": "url", // 格式要求 "range": [1, 255] // 长度范围 } }] } ``` #### API 处理示例 ```javascript // index.js async function main(ctx, db) { // 获取请求参数 const body = ctx.request.body; // 业务处理 const result = await doSomething(body); // 返回结果 return $.ret.obj({ success: true, data: result }); } exports.main = main; ``` #### 使用建议 1. 合理设置请求方法 2. 配置适当的参数校验 3. 注意接口安全性 4. 合理使用缓存机制 5. 做好错误处理和返回 ### 小程序更新动态 + 20240526更新(新增功能及修复BUG) + [修复]修复小程序端,因代码问题,无法正常跳转到激励视频 + 20240520更新(新增功能及修复BUG) + [优化]小程序代码精简,更方便快捷 + [优化]小程序ID填写步骤 + [新增]小程序广告位,无流量主时,可添加HTML代码 + 240519更新 + 1、[新增]后台增加激活码分组,分组后台可添加使用说明(支持HTML代码) + 2、[新增]新增小程序页面的广告代码,可自由切换流量主广告,如暂时无流量主,可用海报代替 + 3、[修复]小程序端代码不过审的BUG