mirror of https://github.com/mx-space/core
ad1b5f6df3 | ||
---|---|---|
.github | ||
.husky | ||
.vscode | ||
bin | ||
configs | ||
debug | ||
patch | ||
scripts | ||
src | ||
test | ||
.dockerignore | ||
.env.example | ||
.eslintignore | ||
.eslintrc.js | ||
.gitattributes | ||
.gitignore | ||
.npmrc | ||
.prettierrc.js | ||
CHANGELOG.md | ||
LICENSE | ||
README.md | ||
docker-compose.yml | ||
dockerfile | ||
ecosystem.config.js | ||
global.d.ts | ||
jest.config.js | ||
nest-cli.json | ||
package.json | ||
paw.paw | ||
pm2.dev.config.js | ||
pnpm-lock.yaml | ||
renovate.json | ||
test-setup.js | ||
tsconfig.build.json | ||
tsconfig.json |
README.md
MX-Server
RESTful API service for Mix Space, powered by
nestjs
, requiredmongoDB
&Redis
.
适用于 Mix Space 的 RESTful API 服务端应用;基于
nestjs
(nodejs),需安装mongoDB
和Redis
方可完整运行。
配合相关项目一起使用:
接口文档通过开发环境 Swagger 查阅。
现有的比较有意思的一些小玩意的实现:
- 实时日志输出。通过 Socket.IO + 劫持
process.stdout
实现。 - PTY 支持。
- 云函数
快速开始
需要以下环境:
- Node.js 16.10+
- MongoDB
- Redis
现有 macOS(x86)、Linux(x86) 的已构建产物。使用以下脚本可免手动构建直接运行。
curl https://cdn.jsdelivr.net/gh/mx-space/mx-server@master/scripts/download-latest-asset.js >> download.js
zx ./download.js
cd mx-server
node index.js
或者手动下载 release,之后解压然后
node index.js
所有的依赖都打包进了产物,无需黑洞一般的 node_modules
Docker 部署
cd
mkdir -p mx/server
cd mx/server
wget https://cdn.jsdelivr.net/gh/mx-space/mx-server@master/docker-compose.yml
docker-compose up -d
开发环境
git clone https://github.com/mx-space/mx-server
cd mx-server
pnpm i
pnpm dev
项目结构
.
├── app.config.ts # 主程序配置,数据库、程序、第三方,一切可配置项
├── app.controller.ts # 主程序根控制器
├── app.module.ts # 主程序根模块,负责各业务模块的聚合
├── common # 存放中间件
│ ├── adapters # Fastify 适配器的配置
│ ├── decorator # 业务装饰器
│ ├── exceptions # 自定义异常
│ ├── filters # 异常处理器
│ ├── guard # 守卫与鉴权
│ ├── interceptors # 拦截器, 数据过滤与响应格式化处理
│ ├── middlewares # 传统意义上的中间件
│ └── pipes # 管道
├── constants # 常量
│ ├── article.constant.ts
│ ├── cache.constant.ts
│ ├── meta.constant.ts
│ ├── path.constant.ts
│ └── system.constant.ts
├── main.ts # 引入配置,启动主程序,引入各种全局服务
├── modules # 业务逻辑模块
│ ├── aggregate
│ ├── analyze
│ ├── auth
│ ├── backup
│ ├── category
│ ├── comment
│ ├── configs
│ ├── feed
│ ├── health
│ ├── init
│ ├── link
│ ├── markdown
│ ├── note
│ ├── option
│ ├── page
│ ├── pageproxy
│ ├── post
│ ├── project
│ ├── pty
│ ├── recently
│ ├── say
│ ├── search
| ├── snippet
| ├── serverless
│ ├── sitemap
│ ├── tool
│ └── user
├── processors # 核心辅助模块
│ ├── cache # Redis 缓存相关
│ ├── database # Mongo 数据库相关
│ ├── gateway # Socket.IO 相关
│ ├── helper # 辅助类
│ └── logger # 自定义 Logger
├── shared # 通用模型
│ ├── dto # 数据验证模型
│ ├── interface # 接口
│ └── model # 基本数据模型
├── utils # 工具类
│ ├── crud.util.ts
│ ├── dayjs.util.ts
│ ├── global.util.ts
│ ├── index.util.ts
│ ├── ip.util.ts
│ ├── nest.util.ts
│ ├── pic.util.ts
│ ├── query.util.ts
│ ├── redis.util.ts
│ ├── system.util.ts
│ ├── time.util.ts
│ ├── transfrom.util.ts
│ └── validator
└── zx.global.ts
应用结构
-
请求处理流程
- request:收到请求
- middleware:中间件过滤爬虫 PHP 肉鸡扫描路径,记录访问历史
- guard:守卫过滤(鉴权)和角色附加
- interceptor:before:只用于 DEBUG 请求计时
- pipe:校验请求数据,过滤未知数据,非法类型抛错 422
- controller & resolver:业务控制器
- service:业务服务
- interceptor:after:数据流拦截器(格式化数据)、请求缓存
- filter:捕获以上所有流程中出现的异常,如果任何一个环节抛出异常,则返回错误
-
拦截器流向
ResponseInterceptor -> JSONSerializeInterceptor -> CountingInterceptor -> AnalyzeInterceptor -> HttpCacheInterceptor
-
- [Aggregate] 聚合
- [Analyze] 数据统计
- [Auth] 认证
- [Backup] 备份
- [Category] 分类
- [Commnet] 评论
- [Configs] 读取配置项
- [Feed] RSS
- [Health] 应用健康检查与日志相关
- [Init] 初始化相关
- [Link] 友链
- [Markdown] Markdown 解析导入导出解析相关
- [Note] 日记
- [Option] 设置
- [Page] 独立页面
- [PageProxy] 反代管理页
- [Post] 博文
- [Project] 项目
- [Recently] 最近
- [Say] 说说
- [Search] 搜索
- [Sitemap] 站点地图
- [Tool] 工具接口
- [User] 用户
-
- [cache] Redis 缓存相关
- [database] 数据库相关
- [gateway] Socket.IO 相关
- 用户端
- 管理端
- 实时通知
- [helper] 辅助类
- [CountingService] 提供更新阅读计数
- [CronService] 维护管理计划任务
- 自动备份
- 推送百度搜索
- 清除缓存
- etc.
- [EmailService] 送信服务
- [HttpService] 请求模块
- [ImageService] 图片处理
- [TqService] 任务队列
- [UploadService] 上传服务
- [AssetService] 获取本地资源服务
开发
pnpm i
pnpm start
Reference
项目参考了 nodepress
Since 2021-08-31
Thanks
许可
This project is licensed under AGPLv3 licensed. 2021 Innei