Невозможно использовать декоратор в службе NestJS

#decorator #nestjs

#декоратор #nestjs

Вопрос:

Почему мы не можем использовать декоратор в службе NestJS? Вот пример того, как я пытался это сделать, но это не сработало.

Декоратор: @User()

 // user.decorator.ts
import { createParamDecorator } from '@nestjs/common';

export const User = createParamDecorator((data, req): {userId, email} => {
  return data ? req.user[data] : req.user;
});
 

Когда я вызываю этот декоратор в службу, я получаю следующее сообщение: невозможно разрешить подпись декоратора свойств при вызове в качестве выражения

 // connect.service.ts
import { Injectable, Inject } from '@nestjs/common';
import { User } from '../account/user/user.decorator';

@Injectable()
export class ConnectService {
 @User() 
 userInfo;
}
 

Ответ №1:

Похоже, вы пытаетесь добавить декоратор в Injectable(), я не думаю, что вы сможете это сделать. Это должно быть связано с методом, чтобы при его вызове за кулисами могло произойти какое-то волшебство. Рассмотрите возможность использования class-validator и validationPipe, например:

 @Get('vitalsByEncounterID')
async getVitalsByEncounterID(@Query() params: VitalsByEncounterPathDTO, @Headers(DFDHeaders.xRequestId) requestId: string): Promise<VitalSignsDTO[]> {}
 

Тогда вы бы украсили класс

 export class VitalsByEncounterPathDTO {
  @IsString()
  @IsNotEmpty()
  @ApiModelProperty({ required: true, description: 'iCentra id for the patient' })
  patientId: string;

  @IsString()
  @IsNotEmpty()
  @ApiModelProperty({ required: true, description: 'an encounter id for the patient' })
  encounterId: string;
}
 

Ответ №2:

Вы пытаетесь украсить свойство с помощью a ParamDecorator , вот почему вы получаете это сообщение об ошибке.

Можете ли вы предоставить более подробную информацию о вашем использовании? Возможно, это помогло бы кому-то дать некоторое представление о том, чего вы пытаетесь достичь.