NestJS - 如何使用 @Body() 装饰器访问帖子正文?

     2023-03-10     112

关键词:

【中文标题】NestJS - 如何使用 @Body() 装饰器访问帖子正文?【英文标题】:NestJS - How to access post body using @Body() decorator? 【发布时间】:2018-10-09 11:27:49 【问题描述】:
import  Controller, Post, Body  from '@nestjs/common';
import  MyService  from 'my.service';
import  MyDto  from './dto/my.dto';

@Controller('my-route')
export class MyController 

    constructor(private readonly _myService: MyService) 

    @Post()
    async  myMethod(@Body() myDto: MyDto) 
        console.log(myDto); // undefined
        return await this._myService.doStuff(myDto.elementOfInterest); // Passes undefined variable into method.
    

我对从 Nest 中的 POST 访问正文表单数据的正确方法感到困惑。文档和示例都显示了 @Body() 装饰器在参数名称之前的简单用法,该参数将包含正文(如果使用参数,则为正文中的特定元素)。然而在我上面的例子中,body 永远不会被填充,并且在 myDto 未定义的情况下调用该方法。即使将其类型更改为字符串并在我的 POST 正文中简单地传递一个键/值对,它也会未定义。

在 Nest 中处理 POST 正文的正确方法是什么?

【问题讨论】:

您是否添加了任何全局PipeInterceptor?我刚刚从一个空白的 Nest 项目中快速检查了一下,创建了一个带有 @Body() 参数的 @Post() 控制器,我让它按预期工作。 编辑 - 我刚刚尝试了您的确切代码,没有 MyDto 和 MyService,它也可以工作。您使用的是哪个版本的 NestJS? 没有管道或拦截器。我在 4.5.10 和 4.6.6 中都进行了测试,并且具有相同的行为。当我将表单数据发送到服务器时,代码会执行,但 body 参数未定义。 另外,请记住将 Content-Type 请求标头设置为 application/json 解决了。 【参考方案1】:

Kamil Mysliwiec 关于Content-Type 的评论是解决方案。

另外,请记住将Content-Type 请求标头设置为application/json

【讨论】:

【参考方案2】:

以防有人偶然发现我的问题。 我也有这个问题,但对我来说是在main.ts 的服务器设置中。

我将此代码设置为包含 ssl 证书以与 https 一起使用,但仅限于生产中

let serverOptions = null;
if (environment.production) 
    const httpsOptions = 
        key: fs.readFileSync(environment.sslKeyPath),
        cert: fs.readFileSync(environment.sslCertPath),
    ;

    serverOptions =  httpsOptions ;

const app = await NestFactory.create(AppModule, serverOptions)

但显然创建带有选项null 的服务器会破坏它。

所以我把它改成了这样,因为它适用于 undefined

const app = await NestFactory.create(AppModule, serverOptions ?? undefinded)

或者做这样的事情,因为我不知道将选项设置为 undefined 是否安全

const app = serverOptions ? await NestFactory.create(AppModule, serverOptions) : await NestFactory.create(AppModule)

希望这可以帮助遇到类似问题的人

【讨论】:

NestJS:如何使用另一个装饰器自动记录@MessagePattern 的输入数据?

】NestJS:如何使用另一个装饰器自动记录@MessagePattern的输入数据?【英文标题】:NestJS:Howtoautomaticallylog@MessagePattern\'sinputdatawithanotherdecorator?【发布时间】:2021-06-0201:12:42【问题描述】:我有一个控制器,它由外部微服务使用Clien... 查看详情

如何在不是nestjs路由的方法上设置装饰器

】如何在不是nestjs路由的方法上设置装饰器【英文标题】:Howtosetadecoratoronamethodthatisnotanestjsroute【发布时间】:2021-11-2809:13:25【问题描述】:NestJS你好!我有个问题。我想把装饰器放在一个不是端点的函数上,也就是路由上。我... 查看详情

NestJS 的自定义路由装饰器

】NestJS的自定义路由装饰器【英文标题】:CustomRouteDecoratorsforNestJS【发布时间】:2020-11-2107:47:37【问题描述】:我已经为我的路线创建了一些customparameterdecorators,但我没有找到任何有用的文档来说明如何为路线本身创建装饰器... 查看详情

@nestjs/swagger:如何在没有 @ApiOkResponse 装饰器的情况下添加架构?

】@nestjs/swagger:如何在没有@ApiOkResponse装饰器的情况下添加架构?【英文标题】:@nestjs/swagger:Howtoaddschemawithout@ApiOkResponsedecorator?【发布时间】:2021-10-3020:17:06【问题描述】:我有两个DTO。用户DTO和用户DTO。UsersDTO大摇大摆地显示... 查看详情

NestJs:确保你的班级用合适的装饰器装饰

】NestJs:确保你的班级用合适的装饰器装饰【英文标题】:NestJs:Makesureyourclassisdecoratedwithanappropriatedecorator【发布时间】:2021-05-1908:36:17【问题描述】:我使用graphql-request作为GraphQL客户端来查询无头CMS以获取内容、修改并返回到... 查看详情

自制方法装饰器擦除所有元数据,我该如何解决?

...【发布时间】:2020-09-2523:05:48【问题描述】:我正在使用NestJS和nestjs/swagger模块来编写简单的api文档,但我遇到了麻烦,因为我需要验证来自我的服务的响应。这就是我创建自己的方法装饰器的原因,但是当我使用它时遇到了很... 查看详情

NestJS 自定义装饰器返回未定义

】NestJS自定义装饰器返回未定义【英文标题】:NestJScustomdecoratorreturnsundefined【发布时间】:2020-06-3009:20:24【问题描述】:早上好,我正在尝试创建自定义装饰器:user.decorator.tsimportcreateParamDecorator,ExecutionContextfrom\'@nestjs/common\';exp... 查看详情

NestJS Swagger - 自定义类的附加属性的定义不与 ApiExtraModels 装饰器一起使用

】NestJSSwagger-自定义类的附加属性的定义不与ApiExtraModels装饰器一起使用【英文标题】:NestJSSwagger-DefinitionofadditionalPropertiesofacustomclassnotworkingwithApiExtraModelsdecorator【发布时间】:2020-08-0415:35:44【问题描述】:我正在尝试在我的Nest... 查看详情

NestJS 测试:装饰器不是函数

】NestJS测试:装饰器不是函数【英文标题】:NestJSTesting:decoratorisnotafunction【发布时间】:2021-01-2016:40:26【问题描述】:我的依赖:"@nestjs/common":"7.4.4","@nestjs/core":"7.4.4","typescript":"4.0.2","jest":"26.4.2","jest-junit":"11.1.0","ts-jest":"26.3 查看详情

为 NestJs GraphQL 查询装饰器设置多种返回类型

】为NestJsGraphQL查询装饰器设置多种返回类型【英文标题】:setupmultiplereturntypesfortheNestJsGraphQLQuerydecorator【发布时间】:2020-05-2721:33:21【问题描述】:我想使用NestJs创建一个GraphQLAPI。据我了解,我不会再为无效请求抛出HTTP异常。... 查看详情

如何使用 @Transaction() 装饰器为方法编写单元测试?

...ecorator?【发布时间】:2019-08-3017:50:58【问题描述】:我在NestJS6上有一项服务。我使用TypeORM来处理MySQL。当我尝试使用@Transaction()和@TransactionManager()装饰器为方法编写单元测试时,我 查看详情

mongoose @prop() 装饰器类型:模式定义中的对象_NestJS

】mongoose@prop()装饰器类型:模式定义中的对象_NestJS【英文标题】:mongoose@prop()decoratortype:Objectinschemadefinition_NestJS【发布时间】:2021-07-0804:49:46【问题描述】:我最近搬到了NestJs。我对定义mongoose模式的属性有一些疑问。如何在模... 查看详情

NestJS Swagger:在 ApiProperty 装饰器中描述地图

】NestJSSwagger:在ApiProperty装饰器中描述地图【英文标题】:NestJSSwagger:DescribeMapinsideApiPropertyDecorator【发布时间】:2020-03-3008:31:48【问题描述】:我在InfluxDB前面有一个NestJSAPI。在API中,我想通过来自nestjs/swagger的ApiProptery装饰器添... 查看详情

带有实体关系的nestjs graphql - 如何装饰它?

】带有实体关系的nestjsgraphql-如何装饰它?【英文标题】:nestjsgraphqlwithentityrelations-howtodecorateit?【发布时间】:2021-04-1109:51:44【问题描述】:当我有关系时,我在“装饰”类时遇到问题,这些类应该用作ObejctType和InputType。应该... 查看详情

在 NestJS 中,我可以在控制器级别添加啥装饰器以向我的 Swagger 文档添加授权标头?

】在NestJS中,我可以在控制器级别添加啥装饰器以向我的Swagger文档添加授权标头?【英文标题】:InNestJS,whatisthedecoratorIcanaddatacontrollerleveltoaddanAuthorizationheadertomySwaggerdocs?在NestJS中,我可以在控制器级别添加什么装饰器以向我的S... 查看详情

NestJs Cron 服务

】NestJsCron服务【英文标题】:NestJsCronService【发布时间】:2021-12-1700:59:37【问题描述】:我正在尝试使用nestJs的Cron装饰器创建计划服务我在下面有一个Cron装饰的方法:@Cron(CronExpression.EVERY_5_SECONDS)triggerDataloaderCron()this.logger.debug(\... 查看详情

NestJS 中与 GraphQL 的 Prisma 自关系

】NestJS中与GraphQL的Prisma自关系【英文标题】:PrismaSelfRelationwithGraphQLinNestJS【发布时间】:2022-01-0610:25:05【问题描述】:我在使用prisma+graphQL+nestjs时遇到问题。它不断告诉我它无法确定graphQL输入类型“错误:无法确定“父级”的... 查看详情

打字稿装饰混乱

...有没有办法解决类内部大量使用装饰器的问题?这是我的NestJS应用程序中一个类的single属性的示例,带有一个不完整的swagger文档装饰器:@ApiModelProperty(description:\'description\',)@Expose()@MaxLength(100,messag 查看详情