اعتبار سنجی داده ها در Nestjs

هنگام ساختن API ، یکی از اولین خطوط دفاعی که باید ایجاد کنید ، اعتبارسنجی ورودی قوی است. این نه تنها با ارائه پیام های خطای واضح ، تجربه کاربر را بهبود می بخشد بلکه از برنامه شما در برابر داده های غیر منتظره یا مخرب نیز محافظت می کند.
من به شما نشان می دهم که چگونه اعتبار ورودی را به روش تمیز ، قابل استفاده مجدد و کارآمد پیاده سازی کنید.
📦 ما به چه چیزی نیاز داریم؟
Nestjs کاملاً با دو کتابخانه قدرتمند کار می کند:
- معتبر کلاس: برای اعمال قوانین اعتبار سنجی.
- ترانسفورماتور کلاس: برای تبدیل داده های ورودی به نمونه های کلاس.
ابتدا بیایید آنها را نصب کنیم:
npm install class-validator class-transformer
📐 مرحله 1: DTO را با قوانین اعتبار سنجی تعریف کنید
بوها DTO (شیء انتقال داده) پاک ترین و اعلام کننده ترین روش برای تعریف داده های شما انتظار و چگونه باید تأیید شود.
// src/users/dto/create-user.dto.ts
import { IsString, IsEmail, IsInt, MinLength, IsNotEmpty } from 'class-validator';
export class CreateUserDto {
@IsString()
@IsNotEmpty()
@MinLength(2)
name: string;
@IsEmail()
email: string;
@IsInt()
age: number;
}
🧱 مرحله 2: از DTO در کنترلر خود استفاده کنید
اکنون ، به سادگی از آن در کنترلر خود استفاده کنید. Nestjs به طور خودکار داده های درخواست را تأیید می کند … اما تنها در صورت فعال کردن لوله اعتبار سنجی (مرحله بعدی).
// src/users/users.controller.ts
import { Controller, Post, Body } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
@Controller('users')
export class UsersController {
@Post()
createUser(@Body() dto: CreateUserDto) {
return {
message: `User ${dto.name} registered successfully.`,
};
}
}
⚙ مرحله 3: اعتبار سنجی را در سطح جهان فعال کنید
برای تأیید خودکار هر درخواست ورودی ، اعتبار سنجی را در سطح جهان پیکربندی کنید main.tsبشر
// src/main.ts
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe({
transform: true, // Automatically transforms types
whitelist: true, // Strips properties not defined in the DTO
forbidNonWhitelisted: true, // Throws an error if unknown properties are present
}));
await app.listen(3000);
}
bootstrap();
🚨 در صورت عدم موفقیت اعتبارسنجی چه اتفاقی می افتد؟
Nestjs به طور خودکار یک پرتاب می کند BadRequestExceptionبشر مشتری یک پاسخ خطای خوب ساختار یافته مانند این دریافت می کند:
{
"statusCode": 400,
"message": [
"name must be a string",
"email must be an email",
"age must be an integer"
],
"error": "Bad Request"
}
🧰 جایزه: اعتبار سنجی برای پرس و جو ، پارامترها و هدرها
همچنین می توانید از DTOS برای اعتبارسنجی داده ها در داخل استفاده کنید Query ()با param ()، یا headers ():
@Get()
getUserByEmail(@Query() query: GetUserByEmailDto) {
return this.userService.findByEmail(query.email);
}
🏁 نتیجه گیری
اعتبار سنجی ورودی یکی از قدرتمندترین راه ها برای حفظ API قوی ، ایمن و آسان برای نگهداری است. با تشکر از ادغام با اعتبار سنج وت ترانسفورماتور کلاس، Nestjs به ما اجازه می دهد تا این کار را به روشی بسیار ساده ، تمیز و قابل حفظ انجام دهیم.
اعتبار سنجی داده ها فقط یک نگرانی فنی نیست. این در مورد مراقبت از تجربه کاربر ، امنیت برنامه و ثبات طولانی مدت آن است.