跳到主要内容

Release 3.10.0

· 阅读需 4 分钟
Harry Chen

新年快乐。

升级请参考 如何更新 Midway 中描述,请不要单独升级某个组件包。

这个版本更新了许多东西,请耐心看完。

Breaking

首先是 Breaking 的部分,这部分并非是框架本身的 API 变更,而是依赖或者行为可能会影响少部分用户,需要注意的部分。

  • 1、 @midwayjs/consul 依赖的 consul 模块从 0.x 升级到 v1 正式版,API 可能有更新(consul.acl 变更为 consul.acl.legacy),具体请查看 文档
  • 2、@midwayjs/jwt 依赖的jsonwebtoken 模块由于安全性问题,从 v8 升级到 v9,API 可能有更新,更多情况请查看 文档
  • 3、由于新增的 @Pipe 功能,@midwayjs/validate 新版本无需使用 @Validate 装饰器即可校验,可能会影响一部分之前未编写装饰器但是新版本却被验证的场景,具体请看下面关于 @Pipe 的介绍或者相关的文档。

New Feature

Pipe

新版本新增了一项 Pipe 能力,可以使参数装饰器的能力更进一步。

藉由此能力,新版本的 Validate 组件不再需要 @Validate 装饰器,代码会更加简洁。

旧:

@Controller('/api/user')
export class HomeController {

@Post('/')
@Validate()
async updateUser(@Body() user: UserDTO ) {
// user.id
}
}

新:

@Controller('/api/user')
export class HomeController {

@Post('/')
async updateUser(@Body() user: UserDTO ) {
// user.id
}
}

针对非 DTO 类型的校验,现在也可以使用 Pipe 进行处理,如果是字符串,会自动转为数字,并进行校验。

@Controller('/api/user')
export class HomeController {

@Post('/update_age')
async updateAge(@Body('age', [ParseIntPipe]) age: number ) {
// ...
}
}

当然 Pipe 的功能不仅如此,更多功能请查看 完整文档

TypeORM Logger

当 typeorm 组件未配置 logger 属性时,新版本会自动创建一个 typeormLogger 用于存储执行的 sql。

默认配置为:

midwayLogger: {
clients: {
typeormLogger: {
lazyLoad: true,
fileLogName: 'midway-typeorm.log',
enableError: false,
level: 'info',
},
},
}

lazyLoad 为新增的属性,可以使 logger 在一开始仅保留配置,等实际 getLogger 时才做初始化。

@Singleton 装饰器

简化原有的写法:

旧:

@Scope(ScopeEnum.Singleton)
@Provide()
class SingletonService {}

新:

@Singleton()
class SingletonService {}

app.getNamespace API

通过 app 上新增的 getNamespace API ,可以获取到当前的 app 归属框架的类型。

比如:

import { Application } from '@midwayjs/web';

@Controller()
class HomeController {

@App()
app: Application;

async invoke() {
// this.app.getNamespace() => 'egg'
}
}

其他的一些变化

  • 1、调整@midwayjs/core 默认 logger level 为 info,的 coreLogger 在服务器环境继续保留 warn
  • 2、faas 模块新增一些自定义触发器类型
  • 3、在 jest 测试环境下,初始化的报错之前会被 jest 吞掉,新版本会通过 console.error 进行输出
  • 4、修复 configuration 的 stop 生命周期,将以 imports 顺序的逆序执行
  • 5、修复 bootstrap 使用 sticky 模式时,文件上传时的错误
  • 6、支持 swager 的属性多类型展示
  • 7、在 midway-bin dev 下,应用在本地开发时也可以快速使用 --ssl 来启动 https 服务