Release 3.10.0
· 阅读需 3 分钟
新年快乐。
升级请参 考 如何更新 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 {}