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

Node.js Nestjs扩展/组合装饰器?,node.js,typescript,decorator,nestjs,Node.js,Typescript,Decorator,Nestjs,我有一个简单的定制装饰器: export const User: () => ParameterDecorator = createParamDecorator( (data: any, req): UserIdentity => { const user = getUser(req); return user; }, ); 现在,我需要验证用户对象中是否有电子邮件 问题是我无法更新当前的装饰器 我可以延长我现在的装修时间吗 在前一个装饰器的基础上创建一个

我有一个简单的定制装饰器:

export const User: () => ParameterDecorator = createParamDecorator(
  (data: any, req): UserIdentity => {
    const user = getUser(req);
    return user;
  },
); 
现在,我需要验证用户对象中是否有电子邮件

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

我可以延长我现在的装修时间吗

在前一个装饰器的基础上创建一个新的装饰器,或者创建一个新的装饰器并将其组合起来?

是的,您可以使用Nest,但这可能不是一个完美的解决方案,这取决于您在用户没有电子邮件属性时打算执行的操作

根据文档中的示例:

从'@nestjs/common'导入{applydcorators}; 导出函数身份验证…角色:角色[]{ 返回应用程序编辑器 设置元数据“角色”,角色, UseGuardsAuthGuard、RolesGuard、, Apibarerauth, ApiUnauthorizedResponse{description:'Unauthorized'}, ; } 在本例中,Auth是一个装饰器,可用于组合在applyDecorators中传递的所有装饰器

因此,我建议扩展您的decorator使用

如文件所述:

Nest以与内置@Body、@param和@Query相同的方式处理自定义参数装饰器。这意味着对自定义注释参数以及我们的示例中的用户参数执行管道。此外,可以将管道直接应用于自定义装饰器:

export const User: () => ParameterDecorator = createParamDecorator(
  (data: any, req): UserIdentity => {
    const user = getUser(req);
    return user;
  },
); 
@得到 异步的findOne@UsernewValidationPipe用户:UserEntity{ console.loguser; } 在本例中,用户是一个自定义参数装饰器。ValidationPipe被传递,但您可以想象传递任何消息。

是的,您可以使用Nest,但这对于您的情况可能不是一个完美的解决方案,这取决于当用户没有电子邮件属性时您打算做什么

根据文档中的示例:

从'@nestjs/common'导入{applydcorators}; 导出函数身份验证…角色:角色[]{ 返回应用程序编辑器 设置元数据“角色”,角色, UseGuardsAuthGuard、RolesGuard、, Apibarerauth, ApiUnauthorizedResponse{description:'Unauthorized'}, ; } 在本例中,Auth是一个装饰器,可用于组合在applyDecorators中传递的所有装饰器

因此,我建议扩展您的decorator使用

如文件所述:

Nest以与内置@Body、@param和@Query相同的方式处理自定义参数装饰器。这意味着对自定义注释参数以及我们的示例中的用户参数执行管道。此外,可以将管道直接应用于自定义装饰器:

export const User: () => ParameterDecorator = createParamDecorator(
  (data: any, req): UserIdentity => {
    const user = getUser(req);
    return user;
  },
); 
@得到 异步的findOne@UsernewValidationPipe用户:UserEntity{ console.loguser; }
在本例中,用户是一个自定义参数装饰器。ValidationPipe已通过,但您可以想象通过任何一个。

Thx获得答案。不幸的是,我现在不能扩展当前的decorator,它在另一个项目中,我们将其用作npm包。我使用了applyDecorators,它就像一个符咒。Thx作为答案。不幸的是,我现在不能扩展当前的decorator,它在另一个项目中,我们将其用作npm包。我使用了applyDecorators,它就像一个符咒。