typescript 在NestJS UserService中调用this. prisma.user.update()时出错

nwlls2ji  于 2023-06-24  发布在  TypeScript
关注(0)|答案(1)|浏览(104)

我在使用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.
yyyllmsg

yyyllmsg1#

@Put('/:id')
editUser(@Param('id', ParseIntPipe) id: number, @Body() dto: EditUserDto) {
  return this.userService.editUser(id, dto);
}

Nestjs是一种类型定义语言。从客户端接收数据时,必须指定其类型。尽管patch可以用于更新操作,但我相信put会是更好的解决方案,这里我使用path参数获得id值。如果你做了这样的更新,你的问题就会消失。在这里,使用getuser装饰器,您不能期望通过提取所有user值来获得id。

相关问题