/nestjs-link-header

A simple NestJS interceptor adding Link and Content-Range headers

Primary LanguageTypeScript

Nest Logo

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.

Installation

npm install --save @algoan/nestjs-link-header

Limits

  • 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

Quick Start

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"