#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
, вот почему вы получаете это сообщение об ошибке.
Можете ли вы предоставить более подробную информацию о вашем использовании? Возможно, это помогло бы кому-то дать некоторое представление о том, чего вы пытаетесь достичь.