NestJS 使用 DTO 在 Body 中返回 Null

问题描述 投票:0回答:1

当我使用命令

nest g resource
创建新资源或使用已生成的文件
nest g module product
创建新资源时遇到问题,但当我尝试在邮递员中使用
POST
请求时出现问题(我的情况是使用跳房子和邮递员)。但每次我使用控制台日志连接到 createProductDto 来检查请求正文时,它的返回
{}

产品控制器

import { Body, Controller, Post } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { CreateProductDto } from './dto/create-product.dto';
import { ProductService } from './product.service'

@Controller('api/products')
@ApiTags('products')
export class ProductController {
    constructor(private readonly productService: ProductService) { }

    @Post()
    async create(@Body() createProductDto: CreateProductDto) {
        console.log(createProductDto);
        return this.productService.create(createProductDto);
    }
}

产品模块

import { Module } from '@nestjs/common';
import { ProductService } from './product/product.service';
import { ProductController } from './product/product.controller';
import { PrismaModule } from 'src/prisma/prisma.module';

@Module({
  providers: [ProductService],
  controllers: [ProductController],
  imports: [PrismaModule]
})
export class ProductsModule { }

创建产品DTO

import { ApiProperty } from '@nestjs/swagger';

export class CreateProductDto {
    @ApiProperty()
    title: string;

    @ApiProperty({ required: false })
    description: string;

    @ApiProperty()
    body: string;

    @ApiProperty({ required: false, default: false })
    published?: boolean = false;
}

产品服务

import { Injectable } from '@nestjs/common';
import { CreateArticleDto } from 'src/articles/dto/create-article.dto';
import { PrismaService } from 'src/prisma/prisma.service';
import { CreateProductDto } from './dto/create-product.dto';

@Injectable()
export class ProductService {
    constructor(private prisma: PrismaService) { }

    create(createProductDto: CreateProductDto) {
        return this.prisma.product.create({ data: createProductDto });
    }
}

已经尝试了四次来生成新资源,但还是一样,重新启动电脑,服务仍然没有变化

{
  "name": "Amazing Product",
  "description": "This is a fantastic product you'll love!",
  "price": 10000,
  "image": "https://example.com/product-image.jpg", 
  "categoryId": "1"
}

但是当我使用

@Body() createProductDto: any
时,请求可用

当我提交数据时,我收到错误

  10 create(createProductDto: CreateProductDto) {
→ 11     return this.prisma.product.create({
           data: {
         +   name: String
           }
         })

Argument `name` is missing.

因为正文请求始终是

{}

node.js typescript nestjs
1个回答
0
投票

添加

class-validator
有助于检查您的数据并避免请求中出现意外的空白。

这确实可以帮助解决您面临的问题。如果您的数据不符合预期格式,您会直接收到通知,以便您可以快速查看需要纠正的地方。

© www.soinside.com 2019 - 2024. All rights reserved.