sql >> Databasteknik >  >> NoSQL >> MongoDB

Typscript Mongoose ignorera vissa fält i frågeresultatet på ett säkert sätt

För att transformera ditt vanliga JavaScript-objekt returneras av toObject i ett maskinskrivet objekt kanske du vill använda class-transformer bibliotek (biblioteket rekommenderas av Nest.js för valideringsändamål).

Steg 1.

Installera först class-validator :

$ npm i --save class-transformer

Steg 2.

När den väl har installerats, förutsatt User klass har följande egenskaper:

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

Skapa en annan klass med namnet UserWithoutPassward och importera Exclude

import { Exclude } from "class-transformer";

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

Vi använder Exclude anteckning för att låta class-transformer vet att vi skulle vilja utesluta password .

Steg 3.

importera plainToClass funktion:

import { plainToClass } from "class-transformer";

Och tillbaka till din kod:

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 metod omvandlar ett vanligt javascript-objekt till en instans av en specifik klass, och accepterar följande parametrar:

  1. Klassen som ska instansieras
  2. vanligt objekt

Ytterligare referens om biblioteket

Hoppas det hjälper.




  1. mongo - kunde inte ansluta till server 127.0.0.1:27017

  2. Mongodb (kod=avslutad, status=14) misslyckades men inga tydliga fel

  3. @EnableMongoAuditing för MongoDB på Cloud Foundry / mongolab

  4. Total MongoDB-lagringsstorlek