За да трансформирате вашия обикновен JavaScript обект, върнат от toObject
във въведен обект, може да искате да използвате class-transformer
библиотека (библиотеката се препоръчва от Nest.js
за целите на валидирането).
Стъпка 1.
Първо инсталирайте class-validator
:
$ npm i --save class-transformer
Стъпка 2.
Веднъж инсталиран, ако приемем User
има следните свойства:
class User {
public id: any;
public email: string;
public password: number;
}
Създайте друг неин клас с име UserWithoutPassward
и импортирайте Exclude
import { Exclude } from "class-transformer";
class UserWithoutPassword extends User {
@Exclude()
public password: number
}
Използваме Exclude
анотация за разрешаване на class-transformer
знаем, че бихме искали да изключим password
.
Стъпка 3.
импортирайте plainToClass
функция:
import { plainToClass } from "class-transformer";
И обратно към вашия код:
async validateUser(email: string, password: string): Promise<UserWithoutPassword | null> {
const user = await this.usersService.findOne({ email });
if (user && await compare(password, user.password))
{
return plainToClass(UserWithoutPassword, user.toObject());
}
return null;
}
plainToClass
метод трансформира обикновен javascript обект в екземпляр от конкретен клас, като приема следните параметри:
- Класът за инстанциране
- обикновен обект
Допълнителна справка за библиотеката
Надявам се да помогне.