无法在NestJS服务中使用装饰器

时间:2019-04-19 19:40:20

标签: decorator 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;
}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您正在尝试用ParamDecorator装饰属性,这就是为什么会收到此错误消息的原因。

您可以提供有关用例的更多详细信息吗?这可能会帮助某人对您要实现的目标提供一些见解。