【发布时间】:2021-10-25 11:00:11
【问题描述】:
我有两个装饰器:
export const PlainBodyDecode = createParamDecorator(
async (_, context: ExecutionContext) => {
const req = context.switchToHttp().getRequest();
if (!req.readable) {
throw new BadRequestException('Invalid body');
}
const body = (await rawBody(req)).toString('utf8').trim();
return decode(body);
},
);
export const PlainBody = createParamDecorator(
async (_, context: ExecutionContext) => {
const req = context.switchToHttp().getRequest();
if (!req.readable) {
throw new BadRequestException('Invalid body');
}
return (await rawBody(req)).toString('utf8').trim();
},
);
如您所见,它们非常相似。
我真的很想能够做这样的事情:
export const PlainBodyDecode = createParamDecorator(
decode(PlainBody());
);
如果你明白我的意思。
我是如何使用装饰器的:
@Post('decode')
decode(@PlainBodyDecode() data: any): string {
//...
}
你有什么想法吗?
更新:
我想我需要做一些类似的事情:
export const PlainBodyDecode = (decodeBody = true): ParameterDecorator => {
return createParamDecorator(async (_, context: ExecutionContext) => {
//...
if (decodeBody) {
return decode(body);
} else {
return body;
}
});
};
不过好像不行
【问题讨论】:
-
您为什么要这样做?如果两者相似,那么拥有它们有什么意义呢?您能否详细说明您的用例以及您打算如何通过控制器使用这些装饰器?
-
@Sohan 是的,这就是为什么我正在寻找统一它们的最佳方法的原因。刚刚添加了控制器代码。
-
@Sohan 我认为参数会有所帮助,但我不确定正确的语法
-
我举了一个例子,看看有没有帮助
标签: nestjs