使⽤class-transformer进⾏返回参数拦截中的js对象处理
官⽅⽂档:
⼀般的按照官⽅说明进⾏使⽤并不会有什么问题,但是涉及到对象嵌套的情况,则会有⼀些⼩坑
例如,有如下两个entity:
/**role.ts*/
export class RoleEntity {
id: number;
name: string;
constructor(partial: Partial<RoleEntity>) {
Object.assign(this, partial);
}
}
/** user.ts*/
import { Exclude, Expose, Transform } from 'class-transformer';
import { RoleEntity } from './role';
export class UserEntity {
id: number;
firstName: string;
lastName: string;
@Exclude()
password: string;
@Expose()
role: RoleEntity;
constructor(partial: Partial<UserEntity>) {
Object.assign(this, partial);
}
}
调⽤⽅法如下:
@Get('test')
@Get()
@SerializeOptions({
strategy: 'excludeAll',
})
@UseInterceptors(ClassSerializerInterceptor)
findOne(): UserEntity {
return new UserEntity({
id: 1,
firstName: 'Kamil',
lastName: 'Mysliwiec',
password: 'password',
role: new RoleEntity({ id: 1, name: 'admin' }),
});
}
此时,是⽆法返回role属性的,因为RoleEntity中并未对其属性进⾏Expose,即使UserEntity中对role进
⾏了暴露,最终也只是会返回{}⽽已。所以,需要对RoleEntity中的属性进⾏Expose设置,才会返回le中的属性key与value。像这样:
/**role.ts*/
export class RoleEntity {
@Expose()
id: number;
@Expose()
name: string;
constructor(partial: Partial<RoleEntity>) {
Object.assign(this, partial);
}
}
此外,对象必须是类的实例,也就是必须是通过构造⽅法创建的对象。以下两个对象是不同的:
js assignclass User {
name: string
}
const user1 = new User({name: 'zz'}); const user2 = {name: 'zz'}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。