返回

通过 NestJS + Prisma 进行输入验证与类型转换

前端

简介

欢迎来到 NestJS、Prisma 和 PostgresQL 构建 REST API 系列的第二篇教程。在本篇教程中,你将学会在 API 中如何执行输入验证和类型转换。

如果你没有看过本系列的第一篇,强烈建议你首先阅读它,因为它介绍了本系列的背景和准备工作。在第一篇教程中,我们已经完成了 NestJS 项目的搭建和 Prisma ORM 的集成。现在,让我们开始学习如何在 API 中处理输入验证和类型转换。

输入验证

在构建 REST API 时,输入验证是一个非常重要的环节。它可以确保用户提交的数据是有效的和安全的。在 NestJS 中,我们可以使用各种不同的方式来进行输入验证,最常见的方式是使用类验证器装饰器。

类验证器装饰器是一种特殊的装饰器,它可以被添加到数据传输对象 (DTO) 的属性上,以对该属性的数据进行验证。NestJS 内置了许多常用的类验证器装饰器,例如 @IsString(), @IsNumber(), @IsEmail() 等。

import { IsString, IsNumber } from 'class-validator';

class CreateUserDto {
  @IsString()
  name: string;

  @IsNumber()
  age: number;
}

在上面的示例中,我们使用 @IsString()@IsNumber() 装饰器对 nameage 属性进行了验证。这样,当我们使用 CreateUserDto 来接收用户提交的数据时,NestJS 会自动对这些数据进行验证。如果数据不符合验证规则,NestJS 会抛出错误,并阻止 API 的执行。

类型转换

在某些情况下,我们可能需要对用户提交的数据进行类型转换。例如,我们可能需要将字符串转换为数字,或者将布尔值转换为字符串。在 NestJS 中,我们可以使用管道来实现类型转换。

管道是一种特殊的中间件,它可以在请求到达控制器之前对请求数据进行处理。NestJS 内置了许多常用的管道,例如 ParseIntPipe, ParseBoolPipe, ParseArrayPipe 等。

import { Controller, Get, UsePipes } from '@nestjs/common';
import { ParseIntPipe } from '@nestjs/common/pipes';

@Controller('users')
export class UsersController {
  @Get(':id')
  @UsePipes(ParseIntPipe)
  getUser(@Param('id') id: number) {
    // ...
  }
}

在上面的示例中,我们使用 ParseIntPipe 管道将请求参数 id 从字符串转换为数字。这样,当我们使用 getUser() 方法时,id 参数将始终是一个数字,而不会是一个字符串。

总结

在本文中,我们学习了如何在 NestJS + Prisma 构建的 REST API 中实现输入验证和类型转换。通过使用类验证器装饰器和管道,我们可以确保用户提交的数据是有效的和安全的,并且可以对数据进行类型转换。

在下一篇教程中,我们将学习如何在 NestJS 中处理数据库事务。