我开始学习 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;
}
Run Code Online (Sandbox Code Playgroud)
在终端中,输出只是一个空对象: {}
我已经搜索了其他示例以了解如何正确执行此操作。我在 DigitalOcean中找到了一个教程,它们也在@BodyPOST 请求中使用;他们在教程的结尾留下了一个带有示例的存储库。这个例子既不适合我。
我只是addBook()对book.service.ts档案中的功能做了一个小改动,用于返还新书而不是所有书
addBook(book): Promise<any> {
return new Promise(resolve => {
this.books.push(book);
// resolve(this.books);
resolve(book);
});
}
Run Code Online (Sandbox Code Playgroud)
我从 Postman 执行以下 POST 请求,但响应是一个空对象。
除了 POST 请求之外,所有其他 HTTP 请求都运行良好。
任何想法代码可能有什么问题?提前致谢。
Jay*_*iel 19
您正在发送form-data默认情况下 NestJS 未正确解析的内容。您可以使用application/x-www-url-form-encoded或application/json与rawPostman 中的选项一起使用。JSON 正文如下所示:
{
"id": "7",
"title": "Whatever Title",
"desscription": "whats doc",
"author": "Me"
}
Run Code Online (Sandbox Code Playgroud)
然后您的服务器将正确识别身体。另一种选择是添加一个正确解析表单数据的正文解析器。有几个选项有像multer,form-parser,formidable,等。
小智 7
与示例无关,但与标题相关。
\n如果您在应用程序上使用 ValidationPipe 并设置whitelist=true。
\napp.useGlobalPipes(new ValidationPipe({ whitelist: true }));\nRun Code Online (Sandbox Code Playgroud)\n白名单 \xe2\x80\x94 删除不属于 DTO 的查询的任何属性。
\n并且不要在 DTO 对象上使用“类验证器”中的装饰器
\nimport { IsNotEmpty, MaxLength } from \'class-validator\';\n\nexport class Cat {\n @MaxLength(200)\n @IsNotEmpty()\n name: string;\n\n age: number; // would be removed by ValidationPipe when whitelist=true\n}\nRun Code Online (Sandbox Code Playgroud)\n这些属性将被删除。你会得到空的对象。
\n| 归档时间: |
|
| 查看次数: |
7421 次 |
| 最近记录: |