Saltar al contenido

Cómo implementar la paginación en nestjs con typeorm

Si te encuentras con algo que no entiendes puedes dejarlo en los comentarios y trataremos de ayudarte lo mas rápido que podamos.

Puedes encontrar un buen ejemplo en este proyecto. En breve typeorm tiene un método muy bueno específico para este caso de uso findAndCount.

async findAll(query): Promise  ''

    const [result, total] = await this.userRepository.findAndCount(
        
            where:  name: Like('%' + keyword + '%') , order:  name: "DESC" ,
            take: take,
            skip: skip
        
    );

    return 
        data: result,
        count: total
    

API de repositorio que puede encontrar aquí. Más documentación sobre Repository La clase se puede encontrar aquí.

Resumiendo…

Este middleware verifica si tiene los parámetros de tomar y omitir en la URL, si los tiene, convierte de string al número, si no utiliza los valores predeterminados. 10 para tomar y 0 para saltar.

take es el número de resultados por página y skip, desde donde se debe empezar a leer los registros.

Con eso, me configuré para interceptar la ruta “producto/paginado” solo para el método GET.

Con esto puedo recuperar estos valores en el controlador y pasar a TypeORM o una consulta SQL.

carpetas

@Injectable()
export class PagerMiddleware implements NestMiddleware 
  use(req: any, res: any, next: () => void) 

y aplicar en el módulo.

export class AdminFeatureApi implements NestModule 
  configure(consumer: MiddlewareConsumer) 
    consumer.apply(PagerMiddleware)
    .forRoutes( path: 'product/paged', method: RequestMethod.GET )
  

Controlador

@Controller('product')
export class TrainingDomainController 
  constructor(private service: YourService) 

  @Get('paged')
  get(@Query()  take, skip ) 
    return this.service.findAll(take, skip);
  

y servicio

@Injectable()
export class YourService 
  constructor(
    @InjectRepository(YourEntity)
    private readonly repo: MongoRepository
  ) 

  async findAll(take: number = 10, skip: number = 0) 
    const [data, total] = await this.repo.findAndCount( take, skip );
    return  data, total ;
  

¿OK?

También puede echar un vistazo a este paquete para NestJS y TypeORM:

https://github.com/nestjsx/nestjs-typeorm-paginate

Recuerda que puedes difundir este artículo si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *