A Nest interceptor to display the Link and the Content Range in the response headers.
A simple NestJS interceptor catching page
and per_page
query parameters and format a Link Header, based on GitHub pagination API.
This module uses format-link-header node module to build the response Link Header.
npm install --save @algoan/nestjs-link-header
- On this version, the API attached with this interceptor needs to return an object:
{
"totalDocs": 1530,
"resource": [ { ... }, ..., { ... }]
}
- The resource has to be specified in the interceptor constructor
Import LinkHeaderInterceptor
next to a controller method.
import { LinkHeaderInterceptor } from '@algoan/nestjs-link-header';
import { Controller, Get, UserInterceptors } from '@nestjs/common';
@Controller()
/**
* Controller returning a lot of documents
*/
class AppController {
/**
* Find all documents
*/
@UseInterceptors(new LinkHeaderInterceptor('data'))
@Get('/data')
public async findAll(): Promise<{ totalDocs: number; resource: DataToReturn[] }> {
const data: DataToReturn = await model.find(...);
const count: number = await model.count()
return { totalDocs: count, resource: data };
}
}
For instance, if you have 1015 resources, calling GET /data?page=4&per_page=100
will return:
Content-Range: data 300-399/1015
Link: </data?page=1&per_page=100>; rel="first", </data?page=11&per_page=100>; rel="last", </data?page=5&per_page=100>; rel="next", </data?page=3&per_page=100>; rel="prev"