为什么我们不能在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;
}
您正在尝试使用ParamDecorator
装饰属性,这就是您收到此错误消息的原因。
你能提供一些关于你的用例的更多细节吗?这可能会帮助某些人对你想要实现的目标提供一些见解。
看起来你正试图在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;
}