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