新年快乐。
升级请参考 如何更新 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 服务