Midway 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Midway 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Midway 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
操作系统 跨平台
软件类型 开源软件
所属分类 Web应用开发Web框架
开源组织
地区 国产
投 递 者 陈仲寅
适用人群 未知
收录时间 2019-01-11

软件简介

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

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(8) 发布并加入讨论🔥
发表了资讯
2021/12/06 14:46

Midway v2.14.0 发布,新增 passport/jwt 官方支持

正式发版节奏将于 12.12 之后回归。 Features 1、支持 passport 和 jwt 感谢社区 @Nawbc 提供 passport 和 jwt 组件。 身份验证是大多数 Web 应用程序的重要组成部分,Passport 也是现今 Node.js 中较为流行的鉴权验证库。 Passport 通过策略的可扩展插件进行身份验证请求,同时通过中间件的方式来接入全局或者特定的路由,这最大限度地提高了灵活性并允许开发人员做出应用程序级别的决策。 可以访问 https://midwayjs.org/doc...

1
1
发表了资讯
2021/10/21 15:59

Midway v2.13.4 发布

双十一大促期间,我们的发版周期会变长,请谅解。 Features 1、新增 mongoose 组件 1、mongoose 组件可以独立使用,typegoose 组件基于 mongoose 组件,用户原有使用不变 2、得益于 mongoose 组件的升级,typegoose 也同步支持了多 mongoose 实例(灰度) 3、升级支持的 mongoose 版本到 v6,升级支持的 typegoose 版本到 v9 Bugfix 1、修复加载组件使用对象形式的问题 旧版在加载组件时,如果使用对象形式且没有配置 enabledE...

0
0
发表了资讯
2021/09/28 14:01

Midway 2.13.3 发布,适用于构建 Serverless 服务的 Node.js 框架

临近双十一,我们的发版会更加的慎重,周期变长,请谅解。 Features 1、提供了一批新的组件 1、tablestore 组件,for aliyun tablestore,并提供了完整的多实例方案和 ts 定义 使用文档 2、view 系列的组件,比如 view-ejs 和 view-nunjucks,使用文档 Bugfix 1、provide uuid 改造后的循环注入问题 感谢社区 @HuJingKang 提供此 PR。 在 v2.13.0 版本新增了providerUUId 之后,在组件中使用循环依赖会导致程序卡死,这一 PR 修...

5
1
发表了资讯
2021/09/11 15:14

Midway 2.13.2 发布

Features 1、添加一批新组件 多进程下只在单一进程执行逻辑的组件 @midwayjs/process-agent (测试) sequelize 组件 @midwayjs/sequelize (测试) 2、增加了一批 DTO 方法 感谢社区 @fuguohong 提供此 PR。 具体内容如下: 增加function PickDto<T, K extends keyof T>(dto: Dto<T>,keys: K[]): Dto<Pick<T, typeof keys[number]>> 用于生成新的只包含指定字段的dto 增加 function OmitDto<T, K extends keyof T>(dto: Dto<T>...

0
0
发表了资讯
2021/09/07 15:31

Midway v2.13.0 发布,提供全新组件

Features 1、提供了一些新组件 prometheus-socket-io 组件 用于监控 socket-io 下的运行体况,为 prometheus 组件的扩展组件。 redis 组件 用于创建一个或者多个 redis 服务。 cos 组件 用于创建腾讯云 cos 服务。 2、 http2 的支持(测试) 现在你可以在启动配置中通过 http2: true 来开启 http2 协议的支持。 Bugfix 1、修复在某些场景下,通过具体类包 xxx not found 的报错 在一些场景下,比如测试,组件开发等场景,如果提...

2
0
发表了资讯
2021/09/01 21:41

Midway v2.12.9 发布

1、Serverless 环境下,增加了传统 koa 中 ctx.throw 方法的支持 2、prometheus 组件支持 setDiff 方法

0
0
发表了资讯
2021/08/27 17:59

Midway v2.12.8 发布

修复一个 rabbitMQ 依赖库定义更新报错的问题,感谢社区 @shfshanyue 提供 PR serverless-app 之前内部为处理默认 bodyparser 大小,超过 100k 会报错,现在修改为 2m,和网关保持一致

0
1
发表了资讯
2021/08/25 20:38

Midway v2.12.7 发布

1、主要修复了服务工厂在特定场景下创建服务会出现空配置的问题。 2、完善了服务工厂的 完整文档

0
0
发表了资讯
2021/08/25 20:37

Midway v2.12.6 发布

处理一个当 cwd 和 appDir 不一致时,找不到 egg 插件的问题,当前只有内部特殊场景碰到。

0
0
发表了资讯
2021/08/24 13:11

Midway 一体化 2.0 版本正式发布

Midway 是一个面向未来的云端一体 Node.js 框架。 开源仓库地址:https://github.com/midwayjs/midway,欢迎关注。 在经过近 6 个月的孵化与研发,Midway 一体化 正式发布 2.0 版本,本次更新速览: 新功能 运行时升级 在 1.0 版本中,我们通过编译器来实现 Hooks 的功能。但这也带来了启动速度慢、语法限制、TS 版本兼容等一系列的问题。 而在 2.0 版本中,我们移除了原有的编译器实现,通过 Node.js AsyncLocalStorage 来实现...

0
3
发表了资讯
2021/08/18 18:10

Midway v2.12.5 发布,Node.js 框架

Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。 Features 1、支持 onConfigLoad 生命周期 在 Configuration 中新增了一个 onConfigLoad 方法,用于替代原有的 bootstrap 中的 before 方法,可以用做配置异步加载。 示例: @Configuration({ importConfigs: [ join(__dirname, './config/'), ] }) export class ContainerLifeCycle { async onConfigLoad(cont...

0
1
发表了资讯
2021/08/18 18:09

Midway v2.12.4 发布

Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。 Bugfix 1、修复 axios 在 post,put 等接口是丢失 data 参数的问题 2、修复 FaasMiddleware 中间件定义的问题,感谢 @ijntvwh 提供 PR

0
1
发表了资讯
2021/08/13 10:25

Midway v2.12.3 发布,Node.js 框架

Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。 Bugfix 1、修复上版本 task 组件在 egg 下重复定义 context.logger 的问题 2、处理 @midwayjs/decorator 包中 decoratorManager 的单例问题(现在不同的 @midwayjs/decorator 包会复用同一个 decoratorManager 实例) Features 1、发布了一个支持 vercel 的启动器 2、configuration 中 importConfigs 支持直接对象描述配置 3、configu...

0
3
发表了资讯
2021/08/01 18:03

Midway v2.12.1 发布,新增 Axios 组件

Features 1、新增 Axios 组件 提供一个 axios 组件,用于发送 http 请求。 接口保持和 axios 一致,处理了作用域相关的问题。 使用示例: import { HttpService } from '@midwayjs/axios'; @Provide() export class UserService {    @Inject() httpService: HttpService; async invoke() {    const url = 'https://api.github.com/users/octocat/orgs'; const result = await this.httpServic...

0
1
发表了资讯
2021/07/31 00:17

Midway v2.12.0 发布,新增 OSS 组件

Features 1、新增 @midwayjs/oss 包,提供 oss 服务 从 v2.12.0 版本开始,提供官方的 oss 组件包。 使用示例如下: import { OSSService } from '@midwayjs/oss'; @Provide() export class UserService {   @Inject() ossService: OSSService; async invoke() { // oss 保存文件   await this.ossService.put('xxxx', fileStream); } } 具体请查看 oss 文档。 2、Task 组件增加默认日志打印 现在 ...

0
0
发表了资讯
2021/07/24 22:44

Midway v2.11.7 发布,Node.js 框架

Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。 一些小更新 1、修复 @midwayjs/socketio 特殊场景下的端口问题 在旧版本,当同时启用副框架和 socket.io port 的时候,port 会被忽略。 比如: // main framework const web = new WebFramework().configure({ port: 7001, }); const socket = new SocketFramework().configure({   port: 8001 }); const { Bootstrap }...

0
2
发表了资讯
2021/07/17 15:28

Midway v2.11.6 发布

增强 1、增加一个环境变量,用于动态开启类名冲突检查 process.env.MIDWAY_ENABLE_CONFLICT_CHECK = 'true'; 2、serverless 本地启动支持 https 之前 serverless 开发时启动 https 比较麻烦,新版本默认集成了一个证书,方便本地开启 https 模式。 $ midway-bin dev --ssl

0
1
发表了资讯
2021/07/17 15:23

Midway v2.11.5 发布,orm 组件升级

Features 1、支持 orm 组件定义不同连接的 model 感谢社区用户 zkamisama 提供 PR。 新版本在使用 EntityModel 装饰器时,可以指定一个 connectionName,使得不同的实体可以归属到不同的连接中。 比如: @EntityModel({ connectionName: 'test',      // 可以将该 model 归属于 test 这个连接 }) export class OnlyTestLoadLog { @PrimaryGeneratedColumn({ name: 'id' }) id: number; @Column({ name: 'conten...

0
0
发表了资讯
2021/07/02 16:48

Midway v2.11.3 发布,Serverless 错误安全性更新

增强 1、日志对象 info 增加原始参数 从新版本开始,logger 中的 info 参数,将增加 originArgs 属性,其中保存了用户原始调用的参数。 logger.info(1,2,3,4); printFormat(info => { info.originArgs // [1,2,3,4] }); 2、隐藏 serverless 非 http 触发器返回的错误堆栈 在先前版本,如果在非 http 场景下,业务直接 throw err,会直接将错误对象返回给网关,由网关返回给调用方,考虑到在线上如果直接返回,会将业...

1
0
发表了资讯
2021/07/02 16:46

Midway v2.11.2 发布,提供 Serverless 日志库支持

增强 1、@midwayjs/logger 日志库支持多参数输出 由于之前 @midwayjs/logger 的日志对接了 winston3,由于 winston 的入参限制,无法支持多个参数。 比如: logger.info('123', '456', '789'); 对于 winston 来说,只会识别第一个字符串,midway 在其之上做了调整和优化,使其能支持最多 2 个参数。 在新版本上,我们支持了任意数量的参数,原有的写法都恢复支持,用户不需要去记格式了。 比如下面的格式也能输出的很好。 ...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
8 评论
108 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部