MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Typescript Mongoose ignoriert bestimmte Felder im Abfrageergebnis auf typsichere Weise

Um Ihr einfaches JavaScript-Objekt umzuwandeln, das von toObject zurückgegeben wird in ein typisiertes Objekt, möchten Sie vielleicht class-transformer verwenden Bibliothek (die Bibliothek wird von Nest.js empfohlen). zu Validierungszwecken).

Schritt 1.

Installieren Sie zuerst class-validator :

$ npm i --save class-transformer

Schritt 2.

Einmal installiert, vorausgesetzt User Klasse hat die folgenden Eigenschaften:

 class User {
     public id: any;
     public email: string;
     public password: number;
 }

Erstellen Sie eine weitere Klasse namens UserWithoutPassward und importieren Sie Exclude

import { Exclude } from "class-transformer";

class UserWithoutPassword extends User {
    @Exclude()
    public password: number
}

Wir verwenden Exclude Anmerkung, um class-transformer zu lassen wissen, dass wir password ausschließen möchten .

Schritt 3.

importiere die plainToClass Funktion:

import { plainToClass } from "class-transformer";

Und zurück zu Ihrem Code:

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 -Methode wandelt ein einfaches Javascript-Objekt in eine Instanz einer bestimmten Klasse um und akzeptiert die folgenden Parameter:

  1. Die zu instanziierende Klasse
  2. einfaches Objekt

Weitere Referenzen zur Bibliothek

Hoffe es hilft.