Nestjs: параметр маршрута - PullRequest
0 голосов
/ 23 мая 2018

Есть ли способ добавить триггеры обратного вызова в параметры маршрута. Экспресс-документация Например:

app.param('startDate', handleDateParameter);

Я бы хотел, чтобы он работал только для определенных маршрутов, например api/reports/getDailyReports/:startDate

1 Ответ

0 голосов
/ 24 мая 2018

Концепция Nest Pipes может быть ответом на вашу проблему.

Вы будете использовать ее на уровне метода / маршрута (в отличие от глобального / модуля / уровня контроллера).) в вашем контроллере, используя @Param('<your-param>' YourCustomPipe) в вашем маршруте

Пример :
Сначала определите свой пользовательский HandleDateParameter pipe

// handle-date-parameter.pipe.ts
import { PipeTransform, Injectable, ArgumentMetadata, HttpStatus, 
BadRequestException } from '@nestjs/common';

@Injectable()
export class HandleDateParameter implements PipeTransform<string, number> {
  transform(value: string, metadata: ArgumentMetadata) {
    // ...implement your custom logic here to validate your date for example or do whatever you want :)
    // finally you might want to return your custom value or throw an exception (i.e: throw new BadRequestException('Validation failed'))
    return <your-custom-value>;
  }
}

А затем используйте его в своем контроллере

// reports.controller.ts  
// [Make your imports here (HandleDateParameter and other stuff you need)]
@Controller('reports')
export class ReportsController {
    @Get('getDailyReports/:startDate')
    // The following line is where the magic happens :) (you will handle the startDate param in your pipe
    findDailyReports(@Param('startDate', HandleDateParameter) startDate: Date) {
        //.... your custom logic here
        return <whatever-need-to-be-returned>;
    }
}


Дайте мне знать, если это поможет вам;)

...