开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
Midway首页、文档和下载 - 基于 IoC 的 Web 全栈开发框架 - 开源中国社区
13_float_left_people 13_float_left_close
全部项目分类
我要评价
MIT
TypeScript
跨平台
分享
收藏
51 人收藏
收录时间:2019-01-11
Midway 详细介绍

Midway 是 阿里巴巴淘宝技术部 MidwayJs 团队产出的第二款产品,也是以团队名命名的核心产品 - Midway。

Midway 是一个 Typescript 编写的 Node.js web 框架,它通过 IoC 的注入机制,让应用的业务逻辑进行解耦,让大型 Node.js 应用开发变的更加简单自然。

Midway 的一些特性。

  • 基于 IoC 体系业务代码进行解耦,依赖统一管理统一初始化

  • 常见的 web 场景装饰器简化业务开发

  • 支持 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 等好用的装饰器。

    Midway

    选择将代码托管在码云
    你还在等什么

    可能是中国最大最好的代码托管平台


    大家对 Midway 的评论 (全部 7 条评论)
    {{repayCom.userName}}
    开源前端工程师
    <div class='ref'><div class='ref'><h4>引用来自“ChengShuai”的评论</h4>刚才扫了一遍文档,果然跟egg有着千丝万缕得联系啊。我从前年的egg1.0开始,各个服务就全面切换为egg了,然后又在去年把egg框架下的js版逐步转为ts版,不知道midway和egg的ts版有多大优势。不管怎么说,先找机会用用看,百花齐放总是好的ᖗ乛◡乛ᖘ</div><h4>引用来自“左华栋”的评论</h4>egg 本身设计得有问题。
    被nest.js 发布仅一年就反超了。
    midway 学习了 nest.js 。</div>可以仔细说说蛋蛋有啥问题嘛
    robortly
    <div class='ref'><h4>引用来自“鞋底两万里”的评论</h4>又是阿里不要的东西</div>阿里不是家技术公司呀!
    鞋底两万里
    又是阿里不要的东西
    fhaoquan
    阿里的东西都好用?
    左华栋
    <div class='ref'><h4>引用来自“ChengShuai”的评论</h4>刚才扫了一遍文档,果然跟egg有着千丝万缕得联系啊。我从前年的egg1.0开始,各个服务就全面切换为egg了,然后又在去年把egg框架下的js版逐步转为ts版,不知道midway和egg的ts版有多大优势。不管怎么说,先找机会用用看,百花齐放总是好的ᖗ乛◡乛ᖘ</div>egg 本身设计得有问题。
    被nest.js 发布仅一年就反超了。
    midway 学习了 nest.js 。
    顶部