typescript 如何使用@Body()装饰器访问文章正文?

esyap4oy  于 2022-11-30  发布在  TypeScript
关注(0)|答案(3)|浏览(171)
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中的一个特定元素)。然而,在我上面的示例中,body从未被填充,并且在myDto未定义的情况下调用该方法,即使将其类型更改为字符串并简单地在POST的主体中传递一个键/值对也会使其未定义。
在Nest中处理POST主体的正确方法是什么?

dauxcl2d

dauxcl2d1#

Kamil Mysliwiec关于Content-Type的评论是解决方案。
另外,请记住将Content-Type请求头设置为application/json

gojuced7

gojuced72#

以防有人绊倒我的问题。我也有这个问题,但对我来说,它是在服务器设置在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)

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

plicqrtu

plicqrtu3#

另外,确保它是一个Post请求,而不是get。

相关问题