首页 > 解决方案 > 为什么 Post 请求中的 @Body() 无法正常工作?[巢穴.js]

问题描述

我开始学习 Nest.js,所以我正在关注 Academind 教程(链接)。

当我尝试使用请求中的装饰器获取body变量时,我的代码没有按预期工作。在这部分代码之后@Body()POSTproducts.controller.ts

@Post()
async addProduct(@Body() body: Product) {
  console.log(body);
  const generatedId = this.productService.insertProduct(body.title, body.description, 5.99);
  return generatedId;
}

在终端中,输出只是一个空对象:{}

我已经搜索了其他示例来看看如何正确地做到这一点。我在 DigitalOcean中找到了一个教程,它们也在@BodyPOST 请求中使用;他们在教程的结尾留下了一个带有示例的 repo。这个例子既不适合我。

我只是addBook()对文件中的功能进行了一些小改动,book.service.ts以返回新书而不是所有书籍

addBook(book): Promise<any> {
    return new Promise(resolve => {
        this.books.push(book);
        // resolve(this.books);
        resolve(book);
    });
}

我从 Postman 执行以下 POST 请求,但响应为空对象。

来自邮递员的 POST 请求

所有其他 HTTP 请求都工作得很好,除了 POST 请求。

任何想法代码可能有什么问题?提前致谢。

标签: nestjs

解决方案


您正在发送form-data默认情况下未正确解析的 NestJS。您可以使用application/x-www-url-form-encodedapplication/jsonrawPostman 中的选项一起使用。JSON 正文如下所示:

{
  "id": "7",
  "title": "Whatever Title",
  "desscription": "whats doc",
  "author": "Me"
}

然后您的服务器将正确识别主体。另一种选择是添加正确解析表单数据的正文解析器。有几个选项,如multerform-parserformidable和其他。


推荐阅读