Nestjs 是不是支持同时在操作上获取和发布?

Posted

技术标签:

【中文标题】Nestjs 是不是支持同时在操作上获取和发布?【英文标题】:Does nestjs support Get and Post simultaneously on an action?Nestjs 是否支持同时在操作上获取和发布? 【发布时间】:2021-11-02 08:01:23 【问题描述】:

我是nestjs 的新手,我想同时在我的控制器中的一个方法上应用GetPost。 为简单起见,我只是贴出核心逻辑代码sn-p:

定制装饰器

import  Get, Post  from "@nestjs/common";
import  RenderReact  from 'my-personal-package';

export function Page(path: string, view?: React.ComponentType, methodDecorators?: ((path?: string | string[]) => MethodDecorator)[]): MethodDecorator 
  return (target: any, key: string, desc: PropertyDescriptor) => 
    const decorators = [
      Get(path), // Add Get first.
      Post(path) // Add Post then.
    ];

    if (view) 
      decorators.push(RenderReact(view)); // RenderReact will return a MethodDecorator as well.
    
    decorators.forEach(decorate => decorate(target, key, desc));
    return desc;
  ;

控制器方法

@Page("my-path", ThisIsMyPageFunctionalComponent, [Post]) // Post was from @nestjs/common
async return() 
  // method logic

Page函数最开始的数组“装饰器”,

    添加Get,然后Post,只有Post有效。 添加Post,然后Get,只有Get有效。

我们如何在这里同时应用 Get/Post?

【问题讨论】:

我认为由于 HTTP 装饰器工厂的工作方式,您不能这样做。 Here 你可以看到只有最后一个元数据附加到目标方法。也许有办法做到这一点,但不使用 GetPost 顺便说一句,见***.com/questions/55157583 【参考方案1】:

正如@Micael Levi 上面提到的,作为装饰器工厂如何工作的机制,我们不能以这种方式同时应用 Get 和 Post。我已经尝试了很长时间。

请参考问题here,如@Kim Kern 所发

    我们将通用逻辑提取到一个方法中。 将调用通用逻辑的Get和Post方法分开。

【讨论】:

以上是关于Nestjs 是不是支持同时在操作上获取和发布?的主要内容,如果未能解决你的问题,请参考以下文章

如果不单独使用,nestjs/swagger 是不是支持查询参数的文档?

nestjs 是不是支持 graphql 片段?

nestjs swagger 是不是支持 cookie 身份验证?

在 NestJs 中验证 Google JWT

NestJs - 如何在拦截器上获取请求正文

nestjs 文件上传