我想从返回的JSON中排除密码字段。我正在使用NestJS和Typeorm。
在this question上提供的解决方案对我或NestJS不起作用。如果需要,我可以发布我的代码。还有其他想法或解决方案?谢谢。
我建议创建一个利用class-transformer库的拦截器:
@Injectable()
export class TransformInterceptor implements NestInterceptor {
intercept(
context: ExecutionContext,
call$: Observable<any>,
): Observable<any> {
return call$.pipe(map(data => classToPlain(data)));
}
}
然后,只需使用@Exclude()
装饰器排除属性,例如:
import { Exclude } from 'class-transformer';
export class User {
id: number;
email: string;
@Exclude()
password: string;
}
作为Kamil's answer的补充:
现在可以使用内置的ClassSerializerInterceptor
而不是创建自己的拦截器,请参阅serialization docs。
@UseInterceptors(ClassSerializerInterceptor)
您可以在控制器类或其各个方法上使用它。这种方法返回的每个实体都将使用类变换器进行转换。
您可以通过在控制器或其方法上定义@SerializeOptions()
来自定义其行为:
@SerializeOptions({
excludePrefixes: ['_'],
groups: ['admin']
})
你可以使用包https://github.com/typestack/class-transformer
您可以使用装饰器排除属性,也可以使用组排除属性。