#nestjs
Вопрос:
Я использую декораторы Nestjs и пытаюсь максимально использовать пользовательские декораторы. Я пытаюсь написать свой собственный декоратор @Body param, который проверяет и применяет несколько декораторов одновременно.
Кто-нибудь знает, возможно ли нижеприведенное? У меня возникли трудности с получением второго аргумента в вызове преобразования каналов metadata: ArgumentMetadata
.
export const MyParamDecorator = <T>(myDto: T) => {
return createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
applyDecorators( // also get SetMeta and Pipes to validate DTO
SetMetadata('thisWorks', true)
UsePipes(CustomValidationPipe, OtherPipe), // add MyDTO - type T somehow..
);
return doAsyncWork()
},
)();
}
@Controller('users')
export class UsersController {
@Patch(':id')
update(@MyParamDecorator() asyncWork: Promise<any>) { // <------ Promise<any> is custom async opperation that will be handled. (So I can't type the DTO here..)
return reqBody;
}
}
Комментарии:
1. Я думаю, что меня смущает подход здесь, потому
@Body()
что он является декоратором параметров, но@SetMetadata()
и@UsePipes()
является классовым или классовым методом декораторов, и вы пытаетесь применить их к параметру. Не могли бы вы немного уточнить прецедент использования? Мне интересно, есть ли здесь лучший подход2. Было бы разумнее иметь
MyParamDecorator
внутриapplyDecorators
, а не наоборот