För att transformera ditt vanliga JavaScript-objekt returneras av toObject
i ett maskinskrivet objekt kanske du vill använda class-transformer
bibliotek (biblioteket rekommenderas av Nest.js
för valideringsändamål).
Steg 1.
Installera först class-validator
:
$ npm i --save class-transformer
Steg 2.
När den väl har installerats, förutsatt User
klass har följande egenskaper:
class User {
public id: any;
public email: string;
public password: number;
}
Skapa en annan klass med namnet UserWithoutPassward
och importera Exclude
import { Exclude } from "class-transformer";
class UserWithoutPassword extends User {
@Exclude()
public password: number
}
Vi använder Exclude
anteckning för att låta class-transformer
vet att vi skulle vilja utesluta password
.
Steg 3.
importera plainToClass
funktion:
import { plainToClass } from "class-transformer";
Och tillbaka till din kod:
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
metod omvandlar ett vanligt javascript-objekt till en instans av en specifik klass, och accepterar följande parametrar:
- Klassen som ska instansieras
- vanligt objekt
Ytterligare referens om biblioteket
Hoppas det hjälper.