后端微服务云原生【免费下载链接】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. 项目地址https://gitcode.com/gh_mirrors/mi/midway点击查看免费下载Midway 是一个面向云端一体的 Node.js 框架它同时支持装饰器驱动的传统 Web 开发、函数式的全栈研发模式以及 Serverless/FaaS 部署形态。本文以 Midway 官方 README 为主线结合仓库源码与官方示例系统讲解其核心定位、两种开发范式装饰器与函数式、快速上手流程以及底层实现原理帮助读者直接上手构建可部署到 Server、Serverless 或云函数环境的 Node.js 应用。Midway 是什么一个面向未来场景的 Node.js 框架Midway 是一个适用于构建Serverless 服务、传统应用、微服务、小程序后端的 Node.js 框架。它并非从零实现一套 Web 运行时而是建立在成熟生态之上可以使用Koa、Express 或 Egg.js作为基础 Web 框架提供独立使用的基础解决方案例如Socket.io、GRPC、RabbitMQ等覆盖实时通信、RPC、消息队列等常见场景面向前端/全栈开发人员是一个 Node.js Serverless 框架可运行在AWS、阿里云、腾讯云以及传统 VM/容器环境并能与React 和 Vue轻松集成。从仓库组织上也能看到这一全场景定位packages/目录下既有提供 IoC 容器与框架内核的core也有web-koa、web-express等 Web 适配层以及grpc、rabbitmq、socketio、bull、bullmq、kafka、mqtt、redis等组件化能力。整个仓库采用 pnpm workspace Lerna 管理的 monorepo 结构见 pnpm-workspace.yaml 与 lerna.json当前版本为 4.2.3工程要求 Node.js 20、pnpm 9见 package.json。核心特性速览官方 README 对框架能力做了如下归纳全功能支持 Web 应用 / Serverless / FaaS / 微服务 / 小程序后端等多种场景基于装饰器和依赖注入开发企业级应用前端集成全新的云端一体应用研发体验零 API 调用使用 React Hooks 风格一体研发跨平台支持部署至普通 Server 或 Serverless/FaaS 环境扩展组件化扩展能力支持使用 Koa / Express / Egg.js 生态插件示例官方提供多种场景的示例代码方便快速上手TypeScript 全面支持。范式一使用装饰器开发 Web 应用Midway 最经典、也是 README 首先展示的用法是通过装饰器声明 Controller 与路由。官方最小示例只有十几行代码import { Controller, Get, Provide } from midwayjs/decorator; Provide() Controller(/) export class HomeController { Get(/) async home() { return Welcome to midwayjs!; } }这段代码包含了装饰器开发的核心三要素Provide()将类注册进 IoC 容器使其可以被依赖注入管理Controller(/)声明这是一个控制器类并指定路由前缀Get(/)将home方法映射为GET /的处理函数返回值即为响应体。这种类 方法装饰器的开发方式配合 Midway 的依赖注入容器可以非常自然地组织业务代码、复用 Service、注入配置与中间件。范式二使用函数开发全栈应用零 API 调用的云端一体研发这是 README 重点展示的面向前端/全栈开发者的研发模式后端直接以函数形式导出前端像调用本地函数一样调用后端接口无需手写 API 层与请求封装。后端代码以函数定义接口后端代码位于src/apis/lambda/index.ts使用midwayjs/hooks提供的Api、Get、Query、useContext等能力import { Api, Get, Query, useContext, } from midwayjs/hooks; export default Api( Get(), Query{ page: string; limit: string; }(), async () { const ctx useContext(); return { page: ctx.query.page, limit: ctx.query.limit, }; } );这里Api()声明这是一个后端函数路由Get()指定 HTTP 方法QueryT()声明查询参数结构useContext()则像 React Hooks 一样在函数内获取当前请求上下文ctx.query拿到 URL 查询参数。前端调用像调用本地函数一样请求后端前端在src/page/index.tsx中直接 import 后端函数并调用import getArticles from ./api; const response await getArticles({ query: { page: 0, limit: 10 }, }); console.log(response); // { page: 0, limit: 10 }手动调用底层本质仍是 HTTP 接口函数式开发并不是黑魔法它最终仍然映射为标准 HTTP 接口因此也可以手动发起请求fetch(/api/articles?page0limit10) .then((res) res.json()) .then((res) console.log(res)); // { page: 0, limit: 10 }三种调用方式返回完全一致的结果这正是零 API 调用的含义框架自动完成路由注册、参数透传与序列化开发者把精力集中在业务函数本身。源码视角函数式路由如何被注册为真实路由函数式 API 并非独立的另一套运行时而是建立在装饰器体系之上的语法糖。核心实现在 packages/core/src/functional/api.ts 的defineApi中通过api.get()、api.post()等方法返回一个RouteBuilder支持链式调用.input()、.output()、.middleware()、.meta()与.handle()api.ts每条路由会被规范化为FunctionalRouteDefinition其method必须落在 GET/POST/PUT/DELETE/PATCH/OPTIONS/HEAD/ALL 集合内否则抛出错误api.ts框架内部会为函数式模块动态生成一个类如FunctionalApi_prefix_hash把每个函数挂到该类的原型方法上再复用RequestMapping与Controller装饰器完成与类式开发完全一致的路由注册流程api.ts。也就是说函数式 API 与装饰器 Controller 最终殊途同归都汇入同一套路由注册机制因此可以在同一应用中混用两种写法。Hooks 风格在函数中获取容器能力useXxx系列 API 定义在 packages/core/src/functional/hooks.ts让函数式代码也能像 React Hooks 一样按需取用框架能力Hook作用useContext()获取当前请求上下文基于异步上下文管理器存储见 hooks.tsuseLogger(name?)获取当前请求或应用级 LoggerusePlugin(key)获取框架/应用挂载的插件实例useInject(identifier)/useInjectSync(identifier)从 IoC 容器异步/同步获取依赖实例useConfig(key?)读取全局配置走MidwayConfigServiceuseApp(name)/useMainApp()获取指定应用或主应用实例useInjectClient(serviceFactoryClz, clientName?)注入 Service Factory 并取出指定客户端useInjectDataSource(managerClz, name)注入数据源管理器并取出指定数据源官方示例一个完整的函数式 API 服务仓库中的 samples/functional-api-service 是可直接运行的函数式 API 最小工程。其入口配置configuration.ts使用函数式的defineConfiguration组装 Koa、全局前缀与端口import { ESModuleFileDetector } from midwayjs/core; import { defineConfiguration } from midwayjs/core/functional; import * as koa from midwayjs/koa; export default defineConfiguration({ imports: [koa], importConfigs: [ { default: { keys: midway-functional-api-service-sample-key, koa: { globalPrefix: /api, port: 7001, }, }, }, ], detector: new ESModuleFileDetector(), });业务接口定义在 api/health.api.ts展示了meta({ routerName })指定路由名、通过input.body读取请求体的用法import { defineApi } from midwayjs/core/functional; export const healthApi defineApi(/health, api ({ ping: api .get(/ping) .meta({ routerName: healthPing }) .handle(async () { return { ok: true, now: new Date().toISOString(), }; }), echo: api .post(/echo) .meta({ routerName: healthEcho }) .handle(async ({ input }) { return { body: input.body ?? null, }; }), }));可以看到defineApi(/health, api ({...}))的第一个参数是路由前缀第二个参数接收一组路由工厂函数返回对象中的每个键即为一条路由定义。该示例的依赖仅包含midwayjs/bootstrap、midwayjs/core与midwayjs/koa见 package.json是理解函数式 API 的最佳入门样本。路由输入输出与校验defineApi的RouteBuilder还内置了对路由输入params / query / body / headers的校验能力底层validateInput会依次尝试safeParseAsync、safeParse、parseAsync、parse四种方法兼容 Zod 等 schema 校验库校验失败会抛出MidwayCommonError并附带字段标签如input.query方便定位问题见 api.ts。快速上手从一个模板工程开始官方 README 给出的起步流程非常简洁三步即可跑起一个 Midway 应用$ npm -v ## 选择模版 $ npm init midway ## 进入项目路径 cd my_midway_app npm run dev其中npm init midway会启动官方脚手架按交互提示选择一个适合场景的模板Web、Serverless、函数式等随后进入项目目录执行npm run dev即可本地启动开发服务。结合仓库中的 samples/ 与 benchmark/fixtures 目录可以看到官方维护了大量可直接参考的示例工程如functional-api-service、functional-api-hybrid、koa-esm-app、react-functional-api等覆盖 ESM、React/Vue 集成、混合研发等多种形态。生态与扩展组件、文档与社区Midway 的组件化扩展能力使其生态非常丰富。从仓库packages/目录可以看到官方维护的组件全家桶按用途可分为几类Web 适配web-koa、web-express以及 Egg.js 生态兼容层数据与存储typeorm、sequelize、mongoose、mikro、mikro7、leoric、redis、cache-manager、oss、cos、tablestore通信与消息grpc、rabbitmq、kafka、mqtt、socketio、ws、bull、bullmq、piscina安全与鉴权security、jwt、passport、casbin含casbin-redis-adapter、casbin-typeorm-adapter、cross-domain、captcha研发体验swagger、i18n、validate系列validation、validation-joi、validation-zod、validation-class-validator、view系列模板渲染、upload、busboy、cron、event-emitter、tenant、http-proxy、api-bridge、code-dye、prometheus监控等。这些组件即插即用开发者也可以按照相同规范编写自己的组件包。Midway 拥有完善的官方文档站与中文社区仓库内还沉淀了site/Docusaurus 文档站与tutorial/交互式教程工程两套学习资源以及 AGENTS.md、CONTRIBUTING.md 等协作规范贡献者可以在提交前查阅。许可证Midway 采用MIT协议见仓库根目录 LICENSE可以放心用于商业与个人项目。总结Midway 的核心价值在于一套心智多种形态——装饰器与函数式两种开发范式共享同一套 IoC 与路由内核开发者既可以用传统 MVC 方式组织企业级应用也可以用 Hooks 风格实现前端/全栈的云端一体研发并自由选择部署在 Server、容器或各家云厂商的 Serverless 环境。赞分享后端微服务云原生【免费下载链接】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. 项目地址https://gitcode.com/gh_mirrors/mi/midway点击查看免费下载相关推荐midway下一代Node.js Serverless框架如何重塑全栈开发midway下一代Node.js Serverless框架如何重塑全栈开发 你还在为传统Node.js应用的复杂部署流程而困扰还在为Serverless场景后端微服务云原生Django-Auditlog完全指南如何轻松实现Django模型变更追踪Django Auditlog完全指南如何轻松实现Django模型变更追踪 Django Auditlog是一个强大的Django应用能够自动记录模型对象的后端Burn实战应用从嵌入式到Web的全栈AI开发Burn实战应用从嵌入式到Web的全栈AI开发 本文深入探讨了Burn框架在不同计算环境中的实战应用涵盖了从资源受限的嵌入式设备到浏览器端的WebAssem人工智能深度学习机器学习本地部署上一篇告别烧录烦恼3分钟掌握Etcher全平台安全安装下一篇OpenSpec 规范驱动开发一套规范文件管住 20 个 AI 工具不互相打架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考