Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript NestJS-如何使用@body()decorator访问帖子正文?_Typescript_Express_Nestjs - Fatal编程技术网

Typescript NestJS-如何使用@body()decorator访问帖子正文?

Typescript NestJS-如何使用@body()decorator访问帖子正文?,typescript,express,nestjs,Typescript,Express,Nestjs,我对从Nest中的帖子中访问身体形态数据的正确方法感到困惑。文档和示例都显示了在将包含主体(或主体中的特定元素,如果使用了参数)的参数名称之前使用@Body()装饰符的简单用法。然而,在我上面的示例中,从未填充body,并且在myDto未定义的情况下调用该方法。即使将其类型更改为字符串,并在我的帖子正文中简单地传递一个键/值对,也会使其未定义 在Nest中处理帖子正文的正确方法是什么?Kamil Mysliwiec关于内容类型的评论是解决方案 另外,请记住将内容类型请求头设置为应用程序/json

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


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

Kamil Mysliwiec关于
内容类型的评论是解决方案


另外,请记住将
内容类型
请求头设置为
应用程序/json


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

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

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.
    }
}
但显然,创建一个带有选项
null
的服务器会破坏它

所以我把它改成这样,因为它使用未定义的

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)
或者做类似的事情,因为我不知道将选项设置为undefined是否安全

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

希望这能帮助有类似问题的人

您是否添加了任何全局
管道
拦截器
?我刚刚从一个blanknest项目中快速检查了一下,创建了一个带有
@Body()
参数的
@Post()
控制器,我让它按预期工作。编辑-我只是尝试了你的确切代码,没有MyDto和MyService,它也起了作用。您使用的是哪个版本的NestJS?没有管道或拦截器。我在4.5.10和4.6.6中都进行了测试,并且有相同的行为。当我向服务器发送表单数据时,代码会执行,但body参数未定义。另外,请记住将
内容类型
请求头设置为
应用程序/json
。这就解决了问题。
const app = serverOptions ? await NestFactory.create(AppModule, serverOptions) : await NestFactory.create(AppModule)