无法将装饰器用于NestJS服务

问题描述 投票:0回答:1

为什么我们不能在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;
}
decorator nestjs
1个回答
0
投票

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

你能提供一些关于你的用例的更多细节吗?这可能会帮助某些人对你想要实现的目标提供一些见解。


0
投票

看起来你正试图在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;
}
© www.soinside.com 2019 - 2024. All rights reserved.