sql >> Base de Datos >  >> NoSQL >> MongoDB

Typescript Mongoose ignora cierto campo en el resultado de la consulta de forma segura

Para transformar su objeto JavaScript simple devuelto por toObject en un objeto escrito, es posible que desee utilizar class-transformer biblioteca (la biblioteca es recomendada por Nest.js con fines de validación).

Paso 1.

Primero instala class-validator :

$ npm i --save class-transformer

Paso 2.

Una vez instalado, asumiendo User clase tiene las siguientes propiedades:

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

Cree otra clase llamada UserWithoutPassward e importar Exclude

import { Exclude } from "class-transformer";

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

Usamos Exclude anotación para permitir que class-transformer sabemos que nos gustaría excluir password .

Paso 3.

importar el plainToClass función:

import { plainToClass } from "class-transformer";

Y de vuelta a su código:

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 El método transforma un objeto javascript simple en una instancia de una clase específica, aceptando los siguientes parámetros:

  1. La clase a instanciar
  2. objeto simple

Referencia adicional sobre la biblioteca

Espero que ayude.