nestjs-pagination-module
v1.1.5
Published
Nest pagination module
Downloads
4
Maintainers
Readme
Pagination Module for Nest.js
This is module for nest.js framework that provides pagination for typeorm repositories and query builder.
Requirements
| Dependency | version | |---|:-:| | node | > 10 | | nestJs | > 6.0.0 | | typeorm | ^0.2.22 |
Installation:
npm i --save nestjs-pagination-module
Usage
Import pagination into module
@Module({
imports: [
...
PaginationModule,
],
...
})
export class MyModule {}
Inject PaginationService into your service:
@Injectable()
export class MyService {
constructor(
private readonly _repo: MyRepo<MyEntity>,
private readonly _paginationService: PaginationService
) {}
}
Use pagination in service methods where you need it:
public async findAllPaginated(options: PaginationOptions) {
return this._paginationService.paginate<MyEntity>(this.repo, options);
}
PaginationOptions interface:
{
// page to fetch
page: number;
// limit per page
limit: number;
// express request will be used in next/prev meta properties
request?: Request;
}
Controller example
@Controller('/api/myendpoint')
export class MyController {
constructor(protected readonly service: MyService) {}
@Get()
async getAll(@Query('page') page = 0, @Query('limit') limit = 25) {
this.service.findAllPaginated({ page, limit });
}
}
Links
In order to receive links in response, you should provide express request object to pagination options.
Inject request into Controller method:
@Get()
async getAll(
@Req() request: Request,
@Query('page') page = 0,
@Query('limit') limit = 25) {
this.service.findAllPaginated({ page, limit });
}
Pass this request into service
this.paginationService.paginate({
page: 1,
limit: 10,
request
})
It will build next/previous pages links and return them in response. If there no previous or next pages you will receive null
in response object.
{
"next": "/api/myendpoint?page=2&limit=25",
"previous": null,
}
Response example
{
"items": [
{
"item": 1
},
{
"item": 2
},
{
"item": 3
},
...
],
"page": 1,
"limit": 25,
"totalItems": 100,
"pageCount": 4,
"next": "/api/myendpoint?page=2&limit=25",
"previous": null,
}