nestjs - 为什么 Post 请求中的 @Body() 无法正常工作?[巢穴.js]
问题描述
我开始学习 Nest.js,所以我正在关注 Academind 教程(链接)。
当我尝试使用请求中的装饰器获取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;
}
在终端中,输出只是一个空对象:{}
我已经搜索了其他示例来看看如何正确地做到这一点。我在 DigitalOcean中找到了一个教程,它们也在@Body
POST 请求中使用;他们在教程的结尾留下了一个带有示例的 repo。这个例子既不适合我。
我只是addBook()
对文件中的功能进行了一些小改动,book.service.ts
以返回新书而不是所有书籍
addBook(book): Promise<any> {
return new Promise(resolve => {
this.books.push(book);
// resolve(this.books);
resolve(book);
});
}
我从 Postman 执行以下 POST 请求,但响应为空对象。
所有其他 HTTP 请求都工作得很好,除了 POST 请求。
任何想法代码可能有什么问题?提前致谢。
解决方案
您正在发送form-data
默认情况下未正确解析的 NestJS。您可以使用application/x-www-url-form-encoded
或application/json
与raw
Postman 中的选项一起使用。JSON 正文如下所示:
{
"id": "7",
"title": "Whatever Title",
"desscription": "whats doc",
"author": "Me"
}
然后您的服务器将正确识别主体。另一种选择是添加正确解析表单数据的正文解析器。有几个选项,如multer
、form-parser
、formidable
和其他。
推荐阅读
- android - 在 AlertDialog 中的 TaskCompletionSource 上设置结果时出错
- c++ - 如何检查变量是否派生自类?
- c++ - 在 winapi CALLBACK 函数上返回 FALSE 时出现意外行为(循环被跳过?)
- database - MariaDB 可以支持的最大记录数
- scrapy - 使用字符串变量来保存 css
- hibernate - org.hibernate.LazyInitializationException:无法初始化代理 - Kotlin
- c# - 在 WPF 中使用 ViewModel 时,SelectedItem 始终为空
- elixir - 反转和连接列表
- r - 如何在集群上应用集群?
- javascript - 如何管理未知数量文本区域的状态?