- 后端
- 微服务
- 云原生
【免费下载链接】midway
🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 🌈
Midway 是面向全栈与前端开发者的 Node.js 服务端框架,其价值不仅体现在官方内置的 80+ 组件上,更体现在活跃的社区生态中。本文以 site/docs/awesome_midway.md 为骨架,系统梳理社区贡献的微服务组件、插件、模板渲染方案、示例工程与学习资料,并结合本仓库官方包源码(如 swagger、grpc、crud、casbin)说明这些组件与官方能力的对应关系与落地方式,帮助你在选型时快速判断"该用哪个、官方已有什么、社区补了什么"。
一、文档定位:Midway 社区优质项目的官方索引
awesome_midway.md是 Midway 官方文档站(位于 site/docs)中的社区资源索引页,其核心作用是将散落在社区中的高质量组件、插件、示例项目与学习资料集中归类,共分为五大类:
- 微服务:Nacos 配置、Elasticsearch、Apollo 配置中心、缓存增强、数据库 ORM、可观测性(OpenTelemetry)、JWT、检索、消息队列、限流等方向的组件;
- 插件:邮件发送组件;
- Swagger:Swagger UI 皮肤与 OpenAPI 平台类组件;
- 模板渲染:基于 Vite 的 SSR/CSR 渲染组件;
- 社区示例:从 CRUD 脚手架到后台管理框架再到 Vue3 SSR 框架的完整工程样例。
文档末尾附有对社区贡献者的号召:欢迎编辑该页、将自己维护的高质量 Midway 项目补充进列表,形成良性循环的社区共建机制。
注意:该文档中罗列的大多为第三方开源项目(作者、仓库均为社区维护)。本文只负责介绍它们的能力定位,不提供外部链接;若需获取源码,可通过对应作者在文档中标注的仓库地址自行检索。
二、微服务方向:社区组件补齐官方能力矩阵
2.1 配置中心与注册中心:Nacos、Apollo、Consul
微服务架构的第一步是配置管理与服务发现。社区为 Midway 提供了多种选择:
| 组件 | 作者 | 能力定位 |
|---|---|---|
| @letscollab/midway-nacos | Nawbc | Midway 的 Nacos 注册/配置中心组件 |
| midway-apollo | helloHT | 携程 Apollo 异步动态配置组件,支持配置热更新 |
| midway-elasticsearch | ddzyan | Elasticsearch 客户端组件,用于全文检索与日志分析 |
需要说明的是,Midway 官方同样内置了 consul 组件(本仓库packages/consul),提供注册中心能力;社区组件则在 Nacos、Apollo、Elasticsearch 等方向做了差异化补充。选型时可遵循"官方优先、社区按需"的原则:
- 已在用 Consul 或想少装依赖 → 直接用官方
@midwayjs/consul; - 团队基础设施是 Nacos(阿里系常见)→ 选
midway-nacos; - 需要携程 Apollo 的动态配置分发 → 选
midway-apollo。
2.2 缓存与数据库:@mwcp/cache 与 @mwcp/kmore
@mwcp/cache(waitingsong)是 Midway 缓存的增强组件,在官方缓存能力之上提供了声明式装饰器:
Cacheable:标记方法结果可缓存,调用时优先读取缓存;CacheEvict:缓存失效/清理,配合写入类操作使用;CachePut:主动写入/更新缓存,不依赖方法返回值命中策略;- 支持通过泛型参数自动获取方法入参类型,让 KeyGenerator 的类型推导更安全。
这套设计思路与 Midway 官方装饰器体系(如 swagger 装饰器、casbin 的 UsePermission)一脉相承:通过元数据声明能力,由框架在运行时统一拦截执行,业务代码保持零侵入。
@mwcp/kmore(waitingsong)是基于 [Knex] 的数据库组件,核心亮点包括:
Transactional装饰器:声明式事务管理,无需手写 begin/commit/rollback;- 自动分页与智能连表:减少手写分页和 join 的样板代码;
- 集成 OpenTelemetry 链路追踪:SQL 执行可纳入分布式追踪链路。
作为对照,Midway 官方在数据层提供了 typeorm、sequelize、mongoose、mikro 等 ORM 组件,并在 crud 包中对多种 ORM 做了统一封装;社区组件更偏向特定工具链的深度增强。
2.3 可观测性:@mwcp/otel
@mwcp/otel(waitingsong)是 Midway 的 OpenTelemetry 增强组件,支持 HTTP 与 [gRPC (Unary)] 协议,核心 API 为三个装饰器:
Trace:为方法生成 trace span;TraceLog:在 span 内记录结构化日志;TraceInit:标记初始化阶段的追踪入口。
同样的泛型参数类型推导特性也被应用在这里(otel-generics),保证 KeyGenerator/属性名在编译期即可校验。Midway 官方也提供 prometheus 指标组件与 prometheus-socket-io 等配套,可组合出"指标 + 追踪"的完整可观测方案。
2.4 安全与检索:@mwcp/jwt、@mwcp/paradedb、@mwcp/pgmq
- @mwcp/jwt:JWT 增强组件,提供
Public装饰器标记无需认证的公开接口。官方 jwt 已提供签发/校验能力,社区组件在此基础上简化了"白名单路由"的声明方式。 - @mwcp/paradedb:基于 Rust 编写的 ParadeDB(Postgres 之上的 Elasticsearch 开源替代)组件,提供全文检索、语义检索与混合检索,适合搜索场景深度用户。
- @mwcp/pgmq:基于 PG 数据库扩展 PGMQ 的轻量消息队列组件,原生支持消息持久化与延迟消息,定位类似 AWS SQS / RSMQ;通过
Consumer、PgmqListener装饰器声明消费逻辑,并支持事务内消费与类似 MQExchange的路由概念,适合"不想再引入独立 MQ 集群"的轻量场景。官方对应能力则是 rabbitmq、kafka、bullmq 等重量级 MQ 组件。
2.5 限流:midway-throttler
midway-throttler(larryzhuo)提供 Midway 限流能力,可按接口维度配置 QPS 阈值。官方侧的 security 组件则偏向防 XSS、CSRF、CORS 等 Web 安全防护,二者互补:前者管"速率",后者管"攻击面"。
三、插件与文档工具:邮件、Swagger 皮肤与 OpenAPI 平台
3.1 邮件插件
社区邮件组件(MrDotYan)基于 nodemailer 与 midwayjs 实现,以服务形式注入控制器使用,支持国内/国外双文档。在官方组件集中,邮件发送暂无独立官方包,因此该插件是补齐"通知触达"能力的常见选择。
3.2 Swagger 生态
官方 swagger 组件已经提供了完整的 OpenAPI 文档生成与 Swagger UI 渲染能力:
- 装饰器层:
@ApiProperty、@ApiParam、@ApiBody、@ApiResponse、@ApiTags、@ApiBearerAuth、@ApiBasicAuth、@ApiSecurity、@ApiOperation等 20+ 装饰器(见 decorators); - 配置层:默认配置见 config.default.ts,支持
title、description、version、swaggerPath(默认/swagger-ui)、swaggerUIRender、isGenerateTagForController、useValidationSchema等选项; - 文档构建:通过 documentBuilder.ts 组装 OpenAPI 文档对象。
社区在此基础上进一步丰富了文档体验:
- midwayjs-knife4j2(Junyi):为官方 Swagger UI 提供 Knife4j 风格新皮肤,改善接口调试页面的可读性;
- midway-scalar(nobu121):将 Scalar——一个面向 OpenAPI 标准构建的现代 API 平台——集成进 Midway,提供更现代化的接口文档与调试体验。
实际项目中,可以先用官方 swagger 组件的默认 UI 快速上线,当默认 UI 不满足团队体验要求时再切换到社区皮肤组件,二者共享同一份 OpenAPI 文档产出。
四、模板渲染:yuntian001/midway-vite-view
yuntian001/midway-vite-view是 Midway 的 Vite 渲染组件,支持:
- 服务端渲染(SSR):面向 Vue 3 与 React,由 Midway 服务端直出页面;
- 客户端渲染(CSR):由 Vite 提供开发期 HMR 与生产构建。
它与官方 view、view-ejs、view-nunjucks 等传统模板引擎组件的差异在于:基于 Vite 生态,天然支持现代前端框架的组件化渲染、热更新与按需编译。若团队技术栈是 Vue3/React + Vite,该组件是"前后端一体"的首选方案。
五、社区示例工程:从 CRUD 脚手架到完整后台
5.1 学习型示例
| 示例 | 作者 | 核心内容 |
|---|---|---|
| midwayjs-crud | DeveloperYvan | prisma + casbin + nacos + crud 的组合示例 |
| midway-practice | ddzyan | 请求日志链路、统一响应体、统一异常处理、异常过滤器 + sequelize / typeORM / prisma 三大 ORM |
| midway-learn | hbsjmsjwj | Midway3 + egg + 官方组件集(consul、jwt、typeorm、prometheus、swagger、mysql2、grpc、rabbitmq) |
| midway-boot | 码道功臣 | 较完整的后端最佳实践(详见下节) |
| midway-vue3-ssr | LiQingSong | 基于 Midway + Vue 3 组装的 SSR 框架 |
| midway-admin | MrDotYan | GeekerAdmin + Midwayjs 的后台管理框架 |
5.2 典型能力与官方源码对应
midwayjs-crud与midway-practice中的能力,可以在官方包源码中找到直接对应的实现依据:
- CRUD 能力:官方 crud 包提供装饰器驱动的增删改查,queryParser.ts 实现了查询参数解析——支持
page/limit分页(默认 20、上限 100,见 constants.ts)、sort(字段:ASC|DESC)、filter(字段||操作符||值,支持eq/ne/gt/gte/lt/lte/in/like)、search、join与fields字段裁剪,并对未白名单字段做严格校验,防止越权查询; - 权限控制:官方 casbin 包提供
UsePermission(...permissions)装饰器(见 decorator.ts),支持多权限组合"全满足才放行",配合 auth.guard.ts 拦截请求; - 统一响应/异常:对应官方 core 的过滤器与中间件机制;
- Swagger 集成:对应官方 swagger 组件的自动文档生成。
这意味着:社区示例中的架构选型都有官方能力作为底座,你在参考示例时,可以直接通过本仓库的源码(如 crud 的 typeorm 实现、casbin 的 enforcer 服务)验证其底层原理,而不是只停留在"能用"的层面。
5.3 生产级示例:midway-boot
midway-boot(码道功臣)被文档描述为"一个比较完整的后端功能最佳实践",覆盖了生产后端几乎全部的横切关注点:
- 增删改查及基类封装(与官方 crud 的能力定位一致);
- 数据库操作、缓存操作;
- 用户安全认证与访问安全控制、JWT 访问凭证、分布式访问状态管理、密码加解密;
- 统一返回结果封装、统一异常管理;
- Snowflake 主键生成;
- Swagger 集成及访问认证;
- 环境变量的使用、Docker 镜像构建、Serverless 发布。
它适合作为"从零搭建一个可上线后端"的完整参照:既有业务功能封装,又有工程化(Docker、Serverless)与运维侧(日志、安全)的落地示范。
六、学习资料与社区共建
文档中收录了一份付费学习资料"Midway 开发实践"(码道功臣,51CTO 课程),适合希望系统化学习 Midway 的开发者的进阶路径。与此同时,本仓库自身还提供了另一条完全免费的学习主线:
- 官方文档站源码位于 site/docs,涵盖 166 个中文文档页面;
- 完整的教程工程位于 tutorial,内含课程索引(COURSE_INDEX.md)与架构说明(FINAL_ARCHITECTURE.md);
- 各官方包的 README 与测试用例(如 core/test)是理解实现细节的第一手资料。
共建方式:awesome_midway.md本身就是开放的——无论你维护的是组件、示例还是教程,都可以按文档末尾的提示"编辑此页"把自己(或团队)的高质量项目补充进对应分类,帮助更多 Midway 开发者发现好工具。
七、选型建议与阅读指引
- 先查官方、再看社区:本仓库
packages/下已有 80+ 官方包,覆盖 Web(web、web-koa、web-express)、微服务、数据、消息、可观测性等主流场景;社区组件主要用于补齐 Nacos/Apollo/Elasticsearch/ParadeDB/PGMQ/Knife4j/Scalar/Vite 渲染等差异化能力。 - 按需求分类检索:微服务与数据选型看本文第二节;文档与调试体验看第三节;前后端一体化渲染看第四节;工程参考看第五节。
- 深入验证:任何社区组件的能力都可以在官方源码中找到对应的设计范式(装饰器 + 元数据 + 框架拦截),阅读本仓库 crud、swagger、casbin 的源码,能帮助你快速理解并评估社区组件的实现质量与适配成本。
- 后端
- 微服务
- 云原生
【免费下载链接】midway
🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 🌈
相关推荐
user_agent与其他Go库对比:选择最佳User-Agent解析方案指南 🚀
user_agent与其他Go库对比:选择最佳User Agent解析方案指南 🚀 在Web开发中,User Agent字符串解析是一个看似简单却极其重要的任
开发工具终极Sorry Cypress社区生态指南:插件、工具与最佳实践全解析
终极Sorry Cypress社区生态指南:插件、工具与最佳实践全解析 Sorry Cypress是一款开源免费的Cypress Dashboard替代方案,它
Dubbox服务社区生态:第三方组件集成与插件开发终极指南
Dubbox服务社区生态:第三方组件集成与插件开发终极指南 Dubbox作为Dubbo服务框架的重要扩展,为开发者提供了强大的 第三方组件集成能力 和灵活的 插
后端微服务服务注册发现消息路由
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考