我在使用NestJS应用程序中的this.prisma.user.update()
方法更新用户时遇到了一个问题。在user.service.ts
中生成错误的代码片段如下:
@Injectable()
export class UserService {
constructor(private prisma: PrismaService) {}
async editUser(userId: number, dto: EditUserDto) {
console.log(userId);
const user = await this.prisma.user.update({
where: {
id: userId,
},
data: {
...dto,
},
});
delete user.hash;
return user;
}
}
console.log
中的userId
返回整个对象的JSON表示,而不是获取ID表示。
下面是这个实体的Prisma模式:
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
email String @unique
hash String
firstName String?
lastName String?
cars Car[]
@@map("users")
}
和基本控制器:
@UseGuards(JwtGuard)
@Controller('users')
export class UserController {
constructor(private userService: UserService) {}
@Get('current')
getCurrent(@GetUser('') user: User) {
return user;
}
@Patch()
editUser(@GetUser('id') userId: number, @Body() dto: EditUserDto) {
return this.userService.editUser(userId, dto);
}
}
日志:
Argument id: Got invalid value
{
id: 1,
createdAt: new Date('2023-06-22T05:40:38.230Z'),
updatedAt: new Date('2023-06-23T04:52:31.638Z'),
email: 'test@test.com',
firstName: 'testuser',
lastName: null
}
on prisma.updateOneUser. Provided Json, expected Int.
1条答案
按热度按时间yyyllmsg1#
Nestjs是一种类型定义语言。从客户端接收数据时,必须指定其类型。尽管patch可以用于更新操作,但我相信put会是更好的解决方案,这里我使用path参数获得id值。如果你做了这样的更新,你的问题就会消失。在这里,使用getuser装饰器,您不能期望通过提取所有user值来获得id。