为什么Post请求中的@Body()无法正常工作? [Nest.js]

时间:2020-04-07 18:31:32

标签: nestjs

我开始学习Nest.js,因此我正在遵循Academind教程(link)。

当我尝试在//Style for BootStrap v4 $config['next_link'] = 'Next'; $config['prev_link'] = 'Prev'; $config['first_link'] = false; $config['last_link'] = false; $config['full_tag_open'] = '<ul class="pagination justify-content-center">'; $config['full_tag_close'] = '</ul>'; $config['attributes'] = ['class' => 'page-link']; $config['first_tag_open'] = '<li class="page-item">'; $config['first_tag_close'] = '</li>'; $config['prev_tag_open'] = '<li class="page-item">'; $config['prev_tag_close'] = '</li>'; $config['next_tag_open'] = '<li class="page-item">'; $config['next_tag_close'] = '</li>'; $config['last_tag_open'] = '<li class="page-item">'; $config['last_tag_close'] = '</li>'; $config['cur_tag_open'] = '<li class="page-item active"><span class="page-link">'; $config['cur_tag_close'] = '<span class="sr-only">(current)</span></span></li>'; $config['num_tag_open'] = '<li class="page-item">'; $config['num_tag_close'] = '</li>'; 请求中使用body装饰器获取@Body()变量时,我的代码无法正常工作。遵循POST

中这部分代码
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请求中也使用{}的地方;它们在教程a repo with the example的结尾处保留。这个例子对我都不起作用。

我只是在@Body文件的addBook()函数中做了一点改动,以返回新书而不是所有书

book.service.ts

我从邮递员发出以下POST请求,但响应中有一个空对象。

POST request from Postman

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

任何想法在代码中可能出什么问题吗?提前致谢。 ?

1 个答案:

答案 0 :(得分:7)

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

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

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