为什么我们不能在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;
}
答案 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
装饰属性,这就是为什么会收到此错误消息的原因。
您可以提供有关用例的更多详细信息吗?这可能会帮助某人对您要实现的目标提供一些见解。