gpt4 book ai didi

node.js - Nestjs 扩展/组合装饰器?

转载 作者:行者123 更新时间:2023-12-05 00:57:15 27 4
gpt4 key购买 nike

我有简单的自定义装饰器:

export const User: () => ParameterDecorator = createParamDecorator(
(data: any, req): UserIdentity => {
const user = getUser(req);
return user;
},
);

现在,我需要验证 user 对象中是否有 email

问题是我无法更新我当前的装饰器。

我可以扩展我当前的装饰器吗?

在前一个的基础上创建一个新的装饰器还是创建一个新的装饰器并组合它?

最佳答案

是的,你可以做 "decorator composition"使用 Nest,但这可能不是您的情况的完美解决方案,具体取决于您在 user 没有 email 属性时打算做什么。

根据文档中的示例:

import { applyDecorators } from '@nestjs/common';

export function Auth(...roles: Role[]) {
return applyDecorators(
SetMetadata('roles', roles),
UseGuards(AuthGuard, RolesGuard),
ApiBearerAuth(),
ApiUnauthorizedResponse({ description: 'Unauthorized"' }),
);
}

在本例中,Auth 是一个装饰器,可用于组合所有传入 applyDecorators 的装饰器。


因此,我建议扩展你的装饰器使用 a pipe .

如文档所述:

Nest treats custom param decorators in the same fashion as the built-in ones (@Body(), @Param() and @Query()). This means that pipes are executed for the custom annotated parameters as well (in our examples, the user argument). Moreover, you can apply the pipe directly to the custom decorator:

@Get()
async findOne(@User(new ValidationPipe()) user: UserEntity) {
console.log(user);
}

在本例中,User 是一个自定义参数装饰器。并且 ValidationPipe 被传递,但你可以想象传递任何 pipe .

关于node.js - Nestjs 扩展/组合装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60692331/

27 4 0
文章推荐: reactjs - 无法访问 jest.mock 函数中的变量
文章推荐: yocto - 使用 Yocto,如何将大量文件添加到图像中?
文章推荐: asp.net-core - dnx 和 dnu 不在 Ubuntu 15.10 上运行
文章推荐: javascript - 如何从 React 中的