MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Dattiloscritto Mongoose ignora determinati campi nel risultato della query in modo sicuro

Per trasformare il tuo semplice oggetto JavaScript restituito da toObject in un oggetto digitato, potresti voler usare class-transformer libreria (la libreria è consigliata da Nest.js ai fini della convalida).

Passaggio 1.

Prima installa class-validator :

$ npm i --save class-transformer

Passaggio 2.

Una volta installato, assumendo User classe ha le seguenti proprietà:

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

Crea un'altra classe denominata UserWithoutPassward e importa Exclude

import { Exclude } from "class-transformer";

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

Usiamo Exclude annotazione per lasciare class-transformer sappiamo che vorremmo escludere password .

Passaggio 3.

importa il plainToClass funzione:

import { plainToClass } from "class-transformer";

E torniamo al tuo codice:

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 trasforma un semplice oggetto javascript in un'istanza di classe specifica, accettando i seguenti parametri:

  1. La classe di cui creare un'istanza
  2. oggetto semplice

Ulteriori riferimenti sulla libreria

Spero che aiuti.