NestJS pipes are essential for data validation and transformation. They are used to preprocess incoming data before it reaches your controller methods. In this example, we'll use pipes to validate and transform incoming slug parameters.
Consider the following code snippet:
// Import required modules
import { Controller, Get, Param } from '@nestjs/common';
import { SlugValidationPipe } from './slug-validation.pipe';
import { Article } from './article.entity';
@Controller('articles')
export class ArticleController {
    @Get(':slug')
    getArticleBySlug(@Param('slug', SlugValidationPipe) article: Article) {
        return article;
    }
}
In this code, we define a route parameter named slug using the @Param() decorator. The SlugValidationPipe validates and transforms the slug before passing it to the getArticleBySlug method.
Here's how the SlugValidationPipe works:
// SlugValidationPipe.ts
import { PipeTransform, Injectable, BadRequestException } from '@nestjs/common';
import { ArticleService } from './article.service';
@Injectable()
export class SlugValidationPipe implements PipeTransform {
    constructor(private articleService: ArticleService) {}
    async transform(value: any) {
        const article = await this.articleService.getArticleBySlug(value);
        if (!article) {
            throw new BadRequestException('Article not found');
        }
        return article;
    }
}
Inside the SlugValidationPipe, customize validation and transformation logic as needed. This example assumes an ArticleService with a getArticleBySlug method to retrieve articles using slugs.
 

 
    
Top comments (0)