MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Typescript Mongoose ignora determinado campo no resultado da consulta da maneira segura de tipo


Para transformar seu objeto JavaScript simples retornado por toObject em um objeto digitado, você pode querer usar class-transformer biblioteca (a biblioteca é recomendada por Nest.js para fins de validação).

Etapa 1.

Primeiro instale o class-validator :
$ npm i --save class-transformer

Etapa 2.

Uma vez instalado, assumindo User classe tem as seguintes propriedades:
 class User {
     public id: any;
     public email: string;
     public password: number;
 }

Crie outra classe chamada UserWithoutPassward e importe Exclude
import { Exclude } from "class-transformer";

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

Usamos Exclude anotação para deixar class-transformer sabemos que gostaríamos de excluir password .

Etapa 3.

importe o plainToClass função:
import { plainToClass } from "class-transformer";

E voltando ao seu 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 O método transforma um objeto javascript simples em instância de classe específica, aceitando os seguintes parâmetros:
  1. A classe a ser instanciada
  2. objeto simples

Mais referência sobre a biblioteca

Espero que ajude.