Rumah > hujung hadapan web > tutorial js > zod vs pengesah kelas & pengubah kelas

zod vs pengesah kelas & pengubah kelas

Patricia Arquette
Lepaskan: 2024-12-19 11:42:18
asal
759 orang telah melayarinya

zod vs class-validator & class-transformer

Perbandingan zod dengan pengesah kelas & pengubah kelas dalam NestJS

Saya keliru, atau sekurang-kurangnya ingin tahu antara zod atau pengesah kelas & pengubah kelas
sebagai pustaka pengesahan dalam NestJS.

Perkara Utama

Terus pergi ke sana.

1. Sebab untuk memilih pengesah kelas & pengubah kelas

  • Merupakan pakej duo yang biasa & digunakan secara meluas dalam NestJS
  • Kaedah penulisan sangat NestJS kerana ia pengesahan berasaskan penghias
  • integrasi bersih & lancar dengan penggunaannya dengan pengubah kelas & ValidationPipe

2. Sebab memilih Zod

  • Rangka kerja agnostik
  • Skrip taip sangat
  • Untuk mereka yang lebih suka pendekatan berfungsi & berasaskan skema
  • Prestasi & pengesahan ringan adalah kritikal

Butiran

pengesah kelas & pengubah kelas ialah 2 pakej yang paling biasa digunakan sebagai pengesahan dalam NestJS,
ya, selain daripada fakta bahawa kaedah penulisan adalah sama seperti NestJS menggunakan berasaskan penghias,
juga kerana ia bersih & lancar kerana ia boleh digunakan dengan ValidationPipe sebagai DTO.

Jadi data/muatan masuk yang diterima oleh pengawal telah disahkan & diubah/diubah mengikut definisinya.
Sementara itu, Zod masih perlu mengesahkan data/muatan yang diterima secara manual,
Ya, mungkin hanya 1 atau maksimum 3 baris,
tetapi sudah tentu lebih banyak fungsi pengesahan diperlukan, lebih banyak proses manual diperlukan.

Butiran prosedur

Berikut adalah prosedur terperinci (mungkin subjektif) untuk perbandingan.

pengesah kelas & pengubah kelas

1. Pemasangan

npm install class-validator class-transformer
Salin selepas log masuk

2. Dayakan Pengesahan Global

// 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
  }));
....
}
....
Salin selepas log masuk

3. Tentukan DTO (Objek Pemindahan Data)

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;
}
Salin selepas log masuk

Ia agak panjang, tetapi begitulah keadaannya berasaskan penghias.

4. Penggunaan pengesahan

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
    }
}
Salin selepas log masuk

Zod

1. Pemasangan

npm install zod
Salin selepas log masuk

2. Buat Skim Pengesahan

// 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>;
Salin selepas log masuk

*Peribadi: Saya lebih suka membaca skema ini daripada skema di atas

3. Penggunaan pengesahan

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
    }
}
Salin selepas log masuk

Kesimpulan

Secara peribadi saya lebih suka cara Zod digunakan.
Namun, apa yang perlu digariskan ialah pilih mengikut keperluan & standard pasukan.

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

Atas ialah kandungan terperinci zod vs pengesah kelas & pengubah kelas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan