【问题标题】:Why @Body() in Post request is not working properly? [Nest.js]为什么 Post 请求中的 @Body() 无法正常工作? [巢穴.js]
【发布时间】:2020-07-20 01:17:38
【问题描述】:

我开始学习 Nest.js,所以我正在学习 Academind 教程 (link)。

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

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

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

我已经搜索了其他示例以了解如何正确执行此操作。我找到了a tutorial in DigitalOcean,他们在 POST 请求中也使用了@Body;他们离开了教程的结尾a repo with the example。这个例子不适合我。

我刚刚对book.service.ts 文件上的addBook() 函数做了一个小改动,用于返回新书而不是所有书

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

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

所有其他 HTTP 请求都运行良好,除了 POST 请求。

您知道代码可能有什么问题吗?提前致谢。 ????

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    您发送的 form-data 默认情况下 NestJS 无法正确解析。您可以在 Postman 中使用 application/x-www-url-form-encodedapplication/json 以及 raw 选项。 JSON 正文如下所示:

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

    然后您的服务器将正确识别正文。另一种选择是添加正确解析表单数据的正文解析器。有几种选择,例如multerform-parserformidable 等。

    【讨论】:

    • 这很有帮助,解决了我面临的问题。
    【解决方案2】:

    我也遇到了同样的问题,首先我尝试以 raw 格式发送数据,但它不能正常工作,然后我使用 x-www-urlencoded邮递员上的标签,它为我解决了这个问题。

    编辑:我有一个 raw 格式的错字,现在可以正常使用了!

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2017-10-04
      相关资源
      最近更新 更多