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.
@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.