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
相关产品推荐
相关产品推荐

