Paginación de Productos con Limit y Offset en Controladores API
Clase 27 de 36 • Curso de NestJS: Persistencia de Datos con TypeORM
Contenido del curso
- 3
Instalación de Docker en Windows, macOS y Ubuntu
01:35 - 4

Configuración de Postgres en Docker Compose
09:18 - 5

Conexión a Postgres en Docker: Terminal y PgAdmin
15:16 - 6

Conexión de NestJS a Postgres con Node Postgres
07:28 - 7

Inyección de Dependencias en NETJS: Conexión a PostgreSQL
10:49 - 8

Conexión a Bases de Datos con Variables de Entorno en Node.js
13:49
- 9

Implementación de TypeORM con NestJS en Proyectos Node.js
09:14 - 10

Creación de Entidades en ORM para Tiendas Virtuales
07:46 - 11

Implementación del Patrón Repository en NestJS con TypeORM
13:31 - 12

Operaciones CRUD en ProductService usando TypeORM y Postgres
13:35 - 13

Cambio de Postgres a MySQL en Docker para CRUD de Productos
17:28
- 18

Relaciones 1 a 1 en Bases de Datos con TimeORM
18:58 - 19

Manipulación de Relaciones Uno a Uno en Controladores y Servicios
10:28 - 20

Relaciones Uno a Muchos en Bases de Datos con TypeORM
10:36 - 21

Gestión de Relaciones Uno a Muchos en Controladores de API
10:27 - 22

Relaciones Muchos a Muchos en Time1M: Creación y Manejo Práctico
08:38 - 23

Manipulación de Relaciones Muchos a Muchos en Controladores
15:08 - 24

Manipulación de Relaciones Muchos a Muchos con TimeORM en JavaScript
19:09 - 25

Relaciones Muchos a Muchos con Campos Agregados en TimeWareM
16:41 - 26

CRUD de órdenes de compra y gestión de ítems en NestJS
30:07
- 27

Paginación de Productos con Limit y Offset en Controladores API
10:37 - 28

Filtrado de Precios con Rango Usando Between en Time Wareham
10:17 - 29

Indexación de Parámetros en Bases de Datos: Uso y Precauciones
02:56 - 30

Buenas prácticas de nombramiento en JavaScript y bases de datos
17:52 - 31

Serialización y Transformación de Datos en APIs con ClassTransformer
16:55
¿Cómo realizar la paginación de productos usando un DTO?
La paginación es fundamental para optimizar la visualización de datos en cualquier aplicación. Aquí te mostramos cómo aplicarla en un controlador de productos utilizando un Data Transfer Object (DTO) y pasar los parámetros necesarios para paginar la información de manera efectiva.
Creación de un DTO para parámetros de consulta
En lugar de manejar cada parámetro de consulta por separado, crearemos un DTO especial. Este paso nos permitirá mejorar la flexibilidad y el manejo de query parameters como "limit" y "offset". Sigamos estos pasos:
- Crear un nuevo DTO para el filtrado de productos en la carpeta correspondiente.
- Definir atributos necesarios dentro de este DTO, como
limityoffset. - Validar cada atributo, asegurando que sean opcionales y números positivos. Por ejemplo:
import { IsOptional, IsPositive, Min } from 'class-validator';
export class ProductQueryDto {
@IsOptional()
@IsPositive()
limit: number;
@IsOptional()
@Min(0)
offset: number;
}
- Utilizar estos decoradores asegura que los valores sean válidos antes de ser utilizados en la lógica del negocio.
Implementación de la paginación en el controlador
Una vez que el DTO está configurado, se puede proceder a implementar la paginación en el controlador de productos:
- Modificar el método que manipula el endpoint para recibir el DTO.
- Pasar los parámetros del DTO al método que realiza la consulta de todos los elementos, garantizando que la lógica de paginación se aplique correctamente:
import { ProductQueryDto } from './dtos/product-query.dto';
async findProducts(params: ProductQueryDto): Promise<Product[]> {
const { limit, offset } = params;
// Enviar limit como 'take' y offset como 'skip'
return this.productRepository.find({
take: limit,
skip: offset,
});
}
Transformación automática de parámetros de consulta
Es posible que los parámetros de consulta lleguen como cadenas de texto. Para convertirlos automáticamente a números, podemos ajustar el archivo main.ts y habilitar la transformación implícita para los query params:
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, // Habilita transformación automática
}));
await app.listen(3000);
}
bootstrap();
Verificación de la paginación en Insomnia
Con la configuración anterior, puedes verificar cómo funciona la paginación mediante Insomnia o cualquier herramienta de API. Simplemente:
- Establece
limityoffsetcomo parámetros en el request. - Observa cómo los productos se devuelven de manera paginada.
- Ajusta estos valores para navegar a través de las diferentes páginas de productos disponibles.
Recuerda que el uso de limit y offset permite una paginación flexible que se adapta a las necesidades del frontend o aplicación que estés desarrollando.
Esta técnica es aplicable a cualquier endpoint que requiera paginación. Te animamos a implementar esta estrategia en otros controladores como clientes u órdenes, lo que mejorará la efectividad y eficiencia de la aplicación. ¡Continúa aprendiendo e integrando nuevas técnicas en tus proyectos!