Midway基于 IoC 的 Web 全栈开发框架
Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。
Midway 可以使用 Koa,Express 或 Egg.js 作为基础 Web 框架。它还提供了独立使用的基本解决方案,例如 Socket.io,GRPC,Dubbo.js 和 RabbitMQ 等。
此外,Midway 也适用于前端/全栈开发人员的 Node.js 无服务器框架。构建下一个十年的应用程序。可在 AWS,阿里云,腾讯云和传统 VM /容器上运行。与 React 和 Vue 轻松集成。
Midway 的一些特性。
- 全功能:支持 Web 应用/Serverless/FaaS/微服务/小程序后端等多种场景,基于装饰器和依赖注入开发企业级应用
 - 前端集成:全新的云端一体应用研发体验,零 API 调用,使用 "React Hooks " 风格一体研发
 - 跨平台:支持部署至普通 Server 或 Serverless/FaaS 环境
 - 扩展:组件化扩展能力,另外支持使用 Koa/Express/Egg.js 生态插件
 - 示例: 官方提供多种场景的示例代码,方便开发者快速上手
 - TypeScript 全面支持
 
创建新应用
使用 midway-init 工具自动创建 midway 应用的目录结构:
$ npm i midway-init -g $ midway-init
目前只有一个 ts 的脚手架,可以直接使用。
通过生成的 npm scripts 来驱动启动命令:
$ npm install $ npm run dev
快速开发引导
想要快速上手 midway,除了需要了解一些基础的东西:
-  
虽然可以直接用 js 的语法书写,但是你最好了解 Typescript,这里有个 快速介绍。
 -  
尽可能使用面向对象的思想来编码,它的经久不衰是有道理的,使用 class 机制能够方便的融入我们的新特性。
 -  
了解 midway 的依赖注入体系,以及常用的装饰器,这里做了 依赖注入的介绍。
 -  
如果你在 midway 的文档中没有找到你想要的东西,记住可以去 Egg 的文档找找,或者 向我们提 Issue。
 
代码风格
我们将依赖注入引入到了复杂业务中,经过各种装饰器的包装,业务的同学们可以更加专注的在业务领域,而不用关心依赖的实例化,初始化。
简单的例子。
@provide()
@controller()
export class HomeController {
  @inject()
  reportService: IReportService;
  
  @get('/')
  async index(ctx) {
    ctx.body = await this.reportService.getReport();
  }
}
@provide()
class ReportService implements IReportService {
  @inject()
  reporter: IReportManager;
  
  async getReport(id: number) {
    return await this.reporter.get(id);
  }
} 
上边的代码中我们展示了两个 class,HomeController 依赖了 ReportService ,很常见的写法,可以看到其中没有任何实例化或者初始化的迹象,业务代码也如同普通调用的那样直接,这都归功于依赖注入的魔法。
经过装饰器的修饰,形成了多个类,但是又不会相互耦合的局面,让独立开发,测试都非常的方便。
除了以上的装饰器,我们还开发了 @schedule @init @plugin 等好用的装饰器。
