Как исключить поле сущности из возвращаемого контроллером JSON.NestJS + Typeorm - PullRequest
0 голосов
/ 16 мая 2018

Я хочу исключить поле пароля из возвращенного JSON. Я использую NestJS и Typeorm.

Решение, предоставленное по этому вопросу , не работает ни для меня, ни в NestJS. Я могу опубликовать свой код, если это необходимо. Любые другие идеи или решения? Спасибо.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Я бы предложил создать перехватчик, использующий библиотеку классов :

@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;
}
0 голосов
/ 20 января 2019

В дополнение к Камильскому ответу :

Вместо создания собственного перехватчика теперь вы можете использовать встроенный ClassSerializerInterceptor, см. Документацию по сериализации .

@UseInterceptors(ClassSerializerInterceptor)

Вы можете использовать его в классе контроллера или его отдельных методах.Каждая сущность, возвращаемая таким методом, будет преобразована с помощью класса-преобразователя.


Вы можете настроить его поведение, задав @SerializeOptions() на своем контроллере или его методах:

@SerializeOptions({
  excludePrefixes: ['_'],
  groups: ['admin']
})
0 голосов
/ 16 мая 2018

Вы можете использовать пакет https://github.com/typestack/class-transformer

Вы можете исключить свойства с помощью декораторов, а также вы можете исключить свойства с помощью групп.

...