NestJS Validation & Pipes
Pipes run before route handlers to validate and transform incoming request data. Combined with class-validator and class-transformer, they keep DTOs the single source of truth for input shape and constraints.
When to Apply
- Validating request bodies, query params, or route params in a NestJS app.
- Configuring
ValidationPipe(globally or per-route). - Annotating DTOs with
class-validatordecorators. - Coercing param types with built-in parse pipes (
ParseIntPipe,ParseUUIDPipe, ...). - Writing a reusable custom pipe via
PipeTransform.
Rules
global-validation-pipe- RegisterValidationPipeonce inmain.tsso every endpoint is validated.whitelist-strip-unknown- Usewhitelist+forbidNonWhitelistedto strip or reject unexpected properties.transform-payloads- Enabletransform: trueto auto-instantiate DTO classes and coerce primitive types.dto-classes-not-interfaces- Define DTOs as classes; interfaces are erased at runtime and carry no metadata.class-validator-decorators- Annotate every DTO field withclass-validatordecorators.nested-object-validation- Use@ValidateNested+@Typeto validate nested DTOs and arrays.built-in-parse-pipes- UseParseIntPipe/ParseUUIDPipe/ParseBoolPipeto coerce and validate params.custom-pipe-implementation- ImplementPipeTransformfor reusable custom validation or transformation.
How to Use
Read the relevant file under rules/ for the topic at hand. Each rule states why it matters and shows an incorrect vs. correct example. Apply them when writing or reviewing NestJS input-handling code.