You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS集成Prisma创建API时出现500错误求助

NestJS + Prisma 创建API时500错误:title参数缺失问题解决

问题场景

学习NestJS期间,使用Prisma实现书籍创建接口时,调用POST接口返回500错误,核心报错为Argument title is missing。

报错日志

[Nest] 1188  - 06/11/2023, 11:46:09   ERROR [ExceptionsHandler] 
Invalid `this.prisma.book.create()` invocation in
C:\Users\gamer\Documents\nest\api\src\modules\book\book.service.ts:10:35

   7 constructor(private prisma: PrismaService) {}
   8
   9 async create(data: BookDTO) {
→ 10   return await this.prisma.book.create({
         data: {
       +   title: String
         }
       })

Argument `title` is missing.
PrismaClientValidationError:
Invalid `this.prisma.book.create()` invocation in
C:\Users\gamer\Documents\nest\api\src\modules\book\book.service.ts:10:35

   7 constructor(private prisma: PrismaService) {}
   8
   9 async create(data: BookDTO) {
→ 10   return await this.prisma.book.create({
         data: {
       +   title: String
         }
       })

Argument `title` is missing.

相关代码片段

Book Controller

@Post()
async create(@Body() data: BookDTO) {
  return await this.bookService.create(data);
}

Book Service

async create(data: BookDTO) {
  return await this.prisma.book.create({ data });
}

排查与解决步骤

  • 检查BookDTO定义:确保DTO包含title字段,若使用class-validator,需为title添加必填验证装饰器(如@IsString() @IsNotEmpty()),同时在NestJS主模块中配置ValidationPipe以启用请求体验证:
    // main.ts
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      app.useGlobalPipes(new ValidationPipe({ whitelist: true }));
      await app.listen(3000);
    }
    
  • 验证请求体数据:确认前端发送的POST请求中包含title字段,字段名拼写一致(注意大小写敏感),可通过Postman等工具直接测试请求体格式。
  • 检查Prisma Schema:确认prisma/schema.prisma中的Book模型将title设为必填字段(无可选标记?):
    model Book {
      id    Int     @id @default(autoincrement())
      title String  // 必填字段,不可省略
      // 其他字段定义...
    }
    
  • 调试数据传递:在Service的create方法中添加日志打印,确认传入的data是否包含title:
    async create(data: BookDTO) {
      console.log('接收的数据:', data); // 打印数据用于调试
      return await this.prisma.book.create({ data });
    }
    
  • 排查字段过滤问题:若使用class-transformer,检查是否存在@Exclude等装饰器意外过滤了title字段,确保DTO能正确映射请求体数据。

内容的提问来源于stack exchange,提问作者Alexandre Junior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:27:29