0.0.5 • Published 10 months ago

@uabeseda/nestjs-mongodb-cursor v0.0.5

Weekly downloads
-
License
ISC
Repository
github
Last release
10 months ago

@uabeseda/nestjs-mongodb-cursor

Description

@uabeseda/nestjs-mongodb-cursor is a NestJS library that provides a decorator and an interceptor to stream MongoDB or Mongoose cursors directly to the HTTP response. This allows for efficient data transfer, especially when dealing with large datasets.

Installation

Install the package via npm:

npm install @uabeseda/nestjs-mongodb-cursor

Usage

Global Setup

To apply the cursor streaming interceptor globally across your application

import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { StreamMongoCursorInterceptor } from '@uabeseda/nestjs-mongodb-cursor';

@Module({
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: StreamMongoCursorInterceptor,
    },
  ],
})
export class AppModule {}

Per-Controller Setup

If you prefer to apply the interceptor to specific controllers, use the @UseInterceptors() decorator

import { Controller, UseInterceptors } from '@nestjs/common';
import { StreamMongoCursorInterceptor } from '@uabeseda/nestjs-mongodb-cursor';

@Controller('users')
@UseInterceptors(StreamMongoCursorInterceptor)
export class UserController {
  // Controller methods here
}

Using the @StreamMongoCursor() Decorator

Mark any controller method that should return a streamed cursor with the @StreamMongoCursor() decorator. It can be used with or without a type parameter for serialization.

Basic usage

import { StreamMongoCursor } from '@uabeseda/nestjs-mongodb-cursor';

@Controller('users')
export class UserController {
  constructor(private readonly dataService: DataService) {
  }

  @Get()
  @StreamMongoCursor()
  getData() {
    return this.dataService.getCursor();
  }
}

Custom Serialization

You can provide a type for custom serialization using class-transformer:

import { StreamMongoCursor } from '@uabeseda/nestjs-mongodb-cursor';
import { YourResponseType } from './your-response-type';

@Controller('users')
export class UserController {
  constructor(private readonly dataService: DataService) {
  }

  @Get()
  @StreamMongoCursor({ type: YourResponseType })
  async getData() {
    return this.dataService.getCursor();
  }
}
0.0.5

10 months ago

0.0.4

10 months ago

0.0.3

11 months ago

0.0.2

11 months ago

0.0.1

11 months ago