v3.8.0 是在经过大促之后的第一个 minor 版本,积攒了很多新的能力。
升级请参考 如何更新 Midway 中描述,请不要单独升级某个组件包。
Features
1、etcd 组件
新增了一个 etcd 组件,方便用户使用,文档稍后提供。
import { ETCDService } from '@midwayjs/etcd';
@Provide()
export class UserService {
@Inject()
etcdService: ETCDService;
async invoke() {
const fooValue = await this.etcdService.get('foo').string();
console.log('foo was:', fooValue);
// ...
}
}
更多细节请查看 文档。
2、ServiceFactory 支持设置默认客户端
ServiceFactory 提供了标准的多客户端能力,在默认的客户端中,我们可以设置非 default 的客户端作为默认客户端来使用。
这项能力支持 ServiceFactory 扩展出来的所有组件,包括 axios/cos/oss/redis/tablestore 等,用户自定义的组件也可以通过简单的适配享受到该能力。
比如,我们定义了多个 redis 客户端。
export default {
// ...
redis: {
clients: {
default: {
// ...
},
default2: {
// ...
},
},
},
}
默认注入的 RedisService
永远为 default
指向的客户端,而新版本我们可以通过设置默认的客户端名,来选择默认的客户端。
比如:
export default {
// ...
redis: {
clients: {
default: {
// ...
},
default2: {
// ...
},
},
defaultClientName: 'default2'
},
}
那么实际获取的 redisService
中是 default2
这个实例。
@Provide()
export class UserService {
@Inject()
redisService: RedisService;
async invoke() {
// this.redisService 中包裹的是 default2
}
}
3、数据源类型增加 @InjectDataSource
装饰器
为了简化获取数据源的过程,我们提供了一个新的 @InjectDataSource
装饰器,支持 mikro/sequelize/typeorm。
比如:
import { InjectDataSource } from '@midwayjs/typeorm';
import { DataSource, Repository } from 'typeorm';
@Provide()
export class UserService {
@InjectDataSource()
defaultDataSource: DataSource;
async invoke() {
// ...
}
}
也可以指定数据源。
import { InjectDataSource } from '@midwayjs/typeorm';
import { DataSource, Repository } from 'typeorm';
@Provide()
export class UserService {
@InjectDataSource('default')
defaultDataSource: DataSource;
async invoke() {
// ...
}
}
Bugfix
- 1、修复 windows 下 entity 通配扫描,之前 windows 下的 entity 如果使用了通配符,会扫描失败,导致 entity 无法正确的加入到数据源中,新版本修复了该问题。
- 2、bull 的 Queue 定义处理问题,现在文档已经做了修改,注入的类型可以由
IQueue
变为BullQueue
。
Performance
移除了 babel 编译出的 class 的兼容判断,框架整体性能提升约一倍。