MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Typescript Mongoose ignore certains champs dans le résultat de la requête de manière sûre

Afin de transformer votre objet JavaScript brut renvoyé par toObject dans un objet typé, vous pouvez utiliser class-transformer bibliothèque (la bibliothèque est recommandée par Nest.js à des fins de validation).

Étape 1.

Installez d'abord class-validator :

$ npm i --save class-transformer

Étape 2.

Une fois installé, en supposant User classe a les propriétés suivantes :

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

Créez une autre classe nommée UserWithoutPassward et importez Exclude

import { Exclude } from "class-transformer";

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

Nous utilisons Exclude annotation pour laisser class-transformer savons que nous aimerions exclure password .

Étape 3.

importer le plainToClass fonction :

import { plainToClass } from "class-transformer";

Et revenons à votre 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 transforme un objet javascript simple en instance d'une classe spécifique, en acceptant les paramètres suivants :

  1. La classe à instancier
  2. objet ordinaire

Autre référence sur la bibliothèque

J'espère que ça aide.