Heim > Web-Frontend > js-Tutorial > zod vs. Klassenvalidator und Klassentransformator

zod vs. Klassenvalidator und Klassentransformator

Patricia Arquette
Freigeben: 2024-12-19 11:42:18
Original
761 Leute haben es durchsucht

zod vs class-validator & class-transformer

Vergleich von Zod mit Klassenvalidator und Klassentransformator in NestJS

Ich war verwirrt oder zumindest neugierig zwischen Zod oder Class-Validator & Class-Transformer
als Validierungsbibliothek in NestJS.

Hauptpunkt

Gehen Sie einfach direkt los.

1. Gründe für die Wahl von Klassenvalidator und Klassentransformator

  • Ist ein Duo Pakete, die in NestJS üblich und weit verbreitet sind
  • Die Schreibmethode ist sehr NestJS, da es sich um eine Dekorator-basierte Validierung handelt
  • Saubere und nahtlose Integration durch die Verwendung mit Klassentransformator und ValidationPipe

2. Gründe für die Wahl von Zod

  • Framework-agnostisch
  • Sehr maschinengeschrieben
  • Für diejenigen, die einen funktionalen & schemabasierten Ansatz
  • bevorzugen
  • Leistungs- und Leichtgewichtsvalidierung ist entscheidend

Einzelheiten

class-validator und class-transformer sind die beiden Pakete, die am häufigsten als Validierung in NestJS verwendet werden,
Ja, abgesehen von der Tatsache, dass die Schreibmethode dieselbe ist wie bei NestJS mit Decorator-basiert,
auch weil es sauber und nahtlos ist, weil es mit ValidationPipe als DTO verwendet werden kann.

Die vom Controller empfangenen eingehenden Daten/Nutzdaten wurden entsprechend ihrer Definition validiert und geändert/transformiert.
In der Zwischenzeit muss Zod die empfangenen Daten/Nutzdaten noch manuell validieren
Ja, vielleicht nur 1 oder maximal 3 Zeilen,
Aber je mehr Validierungsfunktionen benötigt werden, desto mehr manuelle Prozesse sind natürlich erforderlich.

Einzelheiten zum Verfahren

Im Folgenden finden Sie detaillierte Verfahren (möglicherweise subjektiv) zum Vergleich.

Klassenvalidator und Klassentransformator

1. Installation

npm install class-validator class-transformer
Nach dem Login kopieren

2. Aktivieren Sie die globale Validierung

// main.ts
....
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
....
  // Enable validation globally
  app.useGlobalPipes(new ValidationPipe({
    transform: true, // Automatically transform payloads to DTO instances
    whitelist: true, // Strip unknown properties
    forbidNonWhitelisted: true, // Throw error for unknown properties
  }));
....
}
....
Nach dem Login kopieren

3. Definieren Sie DTO (Data Transfer Object)

import { IsNotEmpty, IsString, IsInt, Min } from "class-validator";
import { Type, Transform } from "class-transformer";

export class CreateUserDto {
    @Transform(({ value }) => value.trim()) // Trim whitespaces
    @IsNotEmpty({ message: "Nama tidak boleh kosong" })
    @IsString({ message: "Nama harus berupa string" })
    @Min(3, { message: "Minimal panjang nama 3 karakter" })
    name: string;

    @Type(() => Number) // Transform input ke tipe Number
    @IsNotEmpty({ message: "Nama tidak boleh kosong" })
    @IsInt({ message: "Umur harus berupa bilangan bulat" })
    @Min(17, { message: "Minimal umur terdaftar 17 tahun" })
    age: number;
}
Nach dem Login kopieren

Es ist ziemlich lang, aber so ist es auf Dekorateurbasis.

4. Verwendung der Validierung

import { Body, Controller, Post } from "@nestjs/common";
import { CreateUserDto } from "./create-user.dto";

@Controller("users")
export class UsersController {
    @Post()
    create(@Body() createUserDto: CreateUserDto) {
        // Pada titik ini data/payload createUserdDto
        // sudah tervalidasi & diubah sesuai definisinya
        // developer bisa langsung eksekusi service
        // atau logic yang lain
    }
}
Nach dem Login kopieren

Zod

1. Installation

npm install zod
Nach dem Login kopieren

2. Erstellen Sie ein Validierungsschema

// user.validaiton.ts
import { z, ZodType } from "zod";

export class UserValidation {
    static readonly CREATE: ZodType = z.object({
        name: z
            .string({ message: "Nama harus berupa string" })
            .nonempty({ message: "Nama tidak boleh kosong" })
            .min(3, "Minimal panjang nama 13 karakter"),
        age: z
            .number({ message: "Umur harus berupa angka" })
            .int({ message: "Umur harus berupa bilangan bulat" })
            .min(17, "Minimal umur terdaftar 17 tahub"),
    });
}

export type TCreateUserPayload = z.infer<typeof UserValidation.CREATE>;
Nach dem Login kopieren

*Persönlich: Ich lese dieses Schema lieber als das obige

3. Verwendung der Validierung

import { Body, Controller, Post } from "@nestjs/common";
import { UserValidation, TCreateUserPayload } from "./user.validation.ts";

@Controller("users")
export class UsersController {
    @Post()
    create(@Body() createUserPayload: TCreateUserPayload) {
        const payload = UserValidation.CREATE.parse(createUserPayload);
        // Pada titik ini data/payload payload
        // sudah tervalidasi & diubah sesuai definisinya
        // developer bisa langsung eksekusi service
        // atau logic yang lain
    }
}
Nach dem Login kopieren

Abschluss

Ich persönlich bevorzuge die Art und Weise, wie Zod verwendet wird.
Was jedoch betont werden muss, ist gemäß den Bedürfnissen und Standards des Teams auszuwählen.

https://abdulghofurme.github.io/posts/zod-vs-class-validator-n-class-transformer/

Das obige ist der detaillierte Inhalt vonzod vs. Klassenvalidator und Klassentransformator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage