如何从控制器JSON返回的实体字段中排除。 NestJS + Typeorm

问题描述 投票:2回答:3

我想从返回的JSON中排除密码字段。我正在使用NestJS和Typeorm。

this question上提供的解决方案对我或NestJS不起作用。如果需要,我可以发布我的代码。还有其他想法或解决方案?谢谢。

node.js typescript nestjs typeorm
3个回答
5
投票

我建议创建一个利用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;
}

1
投票

作为Kamil's answer的补充:

现在可以使用内置的ClassSerializerInterceptor而不是创建自己的拦截器,请参阅serialization docs

@UseInterceptors(ClassSerializerInterceptor)

您可以在控制器类或其各个方法上使用它。这种方法返回的每个实体都将使用类变换器进行转换。


您可以通过在控制器或其方法上定义@SerializeOptions()来自定义其行为:

@SerializeOptions({
  excludePrefixes: ['_'],
  groups: ['admin']
})

0
投票

你可以使用包https://github.com/typestack/class-transformer

您可以使用装饰器排除属性,也可以使用组排除属性。

© www.soinside.com 2019 - 2024. All rights reserved.