Skip to content

Instantly share code, notes, and snippets.

@WanerValencia
Last active April 28, 2024 02:30
Show Gist options
  • Save WanerValencia/a41fb7b024cdb197a047febb219fee9a to your computer and use it in GitHub Desktop.
Save WanerValencia/a41fb7b024cdb197a047febb219fee9a to your computer and use it in GitHub Desktop.
Recomendaciones de buenas prácticas en NestJS

Recomendaciones de buenas prácticas en NestJS

  1. Uso adecuado de los decoradores: NestJS proporciona una serie de decoradores para ayudarte a desarrollar tu aplicación de manera más eficiente. Por ejemplo, los decoradores @Get(), @Post(), @Put(), @Delete() y @Patch() en tus controladores te permiten manejar fácilmente los diferentes tipos de solicitudes HTTP. Los decoradores @Body(), @Query(), @Param(), etc., te permiten acceder a diferentes partes de la solicitud HTTP.

    @Post('register')
    async register(@Body() createUserDto: CreateUserDto) {
      return this.authService.register(createUserDto);
    }
  2. Encapsula la lógica empresarial en servicios: Mantén los controladores delgados moviendo la lógica empresarial a servicios. Esto ayuda a separar las responsabilidades y hace que tu código sea más mantenible y reutilizable.

    @Injectable()
    export class CatsService {
      private readonly cats: Cat[] = [];
    
      create(cat: Cat) {
        this.cats.push(cat);
      }
    
      findAll(): Cat[] {
        return this.cats;
      }
    }
  3. Manejo adecuado de los errores: Utiliza filtros de excepciones para manejar los errores de manera centralizada.

    @Catch(HttpException)
    export class HttpExceptionFilter implements ExceptionFilter {
      catch(exception: HttpException, host: ArgumentsHost) {
        const ctx = host.switchToHttp();
        const response = ctx.getResponse();
        const request = ctx.getRequest();
        const status = exception.getStatus();
    
        response
          .status(status)
          .json({
            statusCode: status,
            timestamp: new Date().toISOString(),
            path: request.url,
          });
      }
    }
  4. Usa Pipes para validación y transformación: Los Pipes son un excelente lugar para manejar la validación de datos de entrada y la transformación de datos. Utiliza el pipe ValidationPipe incorporado para la validación automática de datos basada en clases de DTO y decoradores de clase-validator.

    @Post()
    async create(@Body(new ValidationPipe()) createCatDto: CreateCatDto) {
      this.catsService.create(createCatDto);
    }
  5. Sigue los principios SOLID: NestJS se construye alrededor de los principios SOLID, que son un conjunto de conceptos de diseño orientado a objetos que ayudan a hacer tu código más flexible, comprensible y mantenible.

  6. Uso de módulos para organizar el código: Los módulos en NestJS ayudan a organizar el código en unidades lógicas. Cada característica de la aplicación debería estar en su propio módulo.

  7. Testing: Escribir pruebas para tu código es fundamental. NestJS se integra muy bien con Jest para las pruebas unitarias y con Supertest para las pruebas de extremo a extremo.

  8. Documentación: Utiliza herramientas como Swagger para documentar tu API. NestJS se integra fácilmente con swagger a través de @nestjs/swagger.

  9. Uso de configuraciones: Las configuraciones deben ser separadas del código. NestJS proporciona el paquete @nestjs/config para manejar las configuraciones de manera eficiente.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment