Nodejs Nestjs数据验证插件@nestjs/zod的使用

Nodejs Nestjs数据验证插件@nestjs/zod的使用
[@nestjs](/user/nestjs)/zod 是一个用于 NestJS 的数据验证库,它利用了 zod 库来提供类型安全的数据验证。zod 是一个功能强大且易于使用的库,可以处理复杂的验证逻辑。

下面是一个简单的示例,展示如何在 NestJS 项目中使用 [@nestjs](/user/nestjs)/zod 进行数据验证:

  1. 安装依赖: 首先,你需要安装 [@nestjs](/user/nestjs)/zodzod

    npm install [@nestjs](/user/nestjs)/zod zod
    
  2. 创建验证方案: 创建一个文件(例如 user.validation.ts),定义你的验证方案。

    import { z } from 'zod';
    
    export const UserSchema = z.object({
      name: z.string().min(1, 'Name is required'),
      email: z.string().email('Invalid email address'),
      age: z.number().min(18, 'Age must be at least 18')
    });
    
  3. 创建控制器: 在你的控制器中使用这个验证方案。

    import { Controller, Post, Body, UsePipes, ValidationPipe } from '[@nestjs](/user/nestjs)/common';
    import { UserSchema } from './user.validation';
    import { ZodValidationPipe } from '[@nestjs](/user/nestjs)/zod';
    
    [@Controller](/user/Controller)('users')
    export class UserController {
      @Post()
      @UsePipes(new ZodValidationPipe(UserSchema))
      createUser(@Body() user: z.infer<typeof UserSchema>) {
        return { message: 'User created', user };
      }
    }
    
  4. 创建模块: 确保你的模块导入了控制器。

    import { Module } from '[@nestjs](/user/nestjs)/common';
    import { UserController } from './user.controller';
    
    [@Module](/user/Module)({
      imports: [],
      controllers: [UserController],
      providers: [],
    })
    export class AppModule {}
    
  5. 测试 API: 你可以使用 Postman 或其他工具来测试这个 API。例如,发送一个 POST 请求到 /users,请求体如下:

    {
      "name": "John Doe",
      "email": "john.doe@example.com",
      "age": 25
    }
    
  6. 处理错误: 如果验证失败,NestJS 会自动返回一个包含错误信息的响应。

以上就是如何在 NestJS 中使用 [@nestjs](/user/nestjs)/zod 进行数据验证的基本步骤。通过这种方式,你可以确保传入的数据符合预期的结构和格式,从而提高应用的安全性和可靠性。


3 回复

当然,@nestjs/zod 是一个结合了 Zod 的强大类型校验能力与 NestJS 的优雅框架。首先,你需要安装它:

npm install [@nestjs](/user/nestjs)/zod zod

然后,在你的 NestJS 服务中,你可以这样用:

import { ZodValidationPipe } from '[@nestjs](/user/nestjs)/zod';
import { z } from 'zod';

const schema = z.object({
  body: z.object({
    name: z.string(),
    age: z.number().min(18),
  }),
});

@Controller('users')
export class UsersController {
  @Post()
  create(@Body(new ZodValidationPipe(schema)) data: z.infer<typeof schema>) {
    // 在这里,data 已经被 Zod 验证过
    return { ...data };
  }
}

现在,每当请求到达 create 方法时,Zod 将自动验证请求体,并确保 name 是字符串且 age 是大于等于 18 的数字。如果验证失败,NestJS 将返回一个 400 错误。


@nestjs/zod 是一个用于 NestJS 的数据验证库,它基于 zod 库,提供了一种类型安全的方式来验证请求和响应的数据。下面我将向你展示如何在 NestJS 项目中使用 @nestjs/zod

首先,确保你的项目已经安装了 @nestjs/common, @nestjs/core, @nestjs/platform-express, zod, 和 @nestjs/zod。你可以通过运行以下命令来安装它们:

npm install @nestjs/common @nestjs/core @nestjs/platform-express zod @nestjs/zod

接下来,我们将创建一个简单的控制器,并定义一些验证规则。

1. 定义 Zod Schema

首先,你需要创建一个 Zod schema 来定义你的数据结构和验证规则。例如,假设我们有一个用户注册的 API,我们需要验证用户名和密码。

src/schemas 目录下创建一个名为 user.schema.ts 的文件:

import { z } from 'zod';

export const userRegistrationSchema = z.object({
    username: z.string().min(3, "用户名至少需要3个字符"),
    password: z.string().min(8, "密码至少需要8个字符")
});

export type UserRegistrationInput = z.infer<typeof userRegistrationSchema>;

2. 创建控制器

现在,在 src/controllers 目录下创建一个 users.controller.ts 文件:

import {
  Controller,
  Post,
  Body,
  UsePipes,
  ValidationPipe,
} from '@nestjs/common';
import { userRegistrationSchema } from '../schemas/user.schema';
import { ZodValidationPipe } from '@nestjs/zod';

@Controller('users')
export class UsersController {
  @Post('register')
  @UsePipes(new ZodValidationPipe(userRegistrationSchema))
  register(@Body() body: UserRegistrationInput) {
    return { message: 'User registered successfully', ...body };
  }
}

在这个例子中,我们使用了 ZodValidationPipe 来自动验证传入的 @Body() 参数是否符合 userRegistrationSchema 定义的模式。

3. 注册模块

最后,在你的主模块(通常是 app.module.ts)中注册控制器:

import { Module } from '@nestjs/common';
import { UsersController } from './controllers/users.controller';

@Module({
  imports: [],
  controllers: [UsersController],
  providers: [],
})
export class AppModule {}

这样,你就完成了一个基本的 NestJS 项目,其中包含了使用 @nestjs/zod 进行数据验证的功能。当你发送 POST 请求到 /users/register 并携带不符合验证规则的数据时,NestJS 将自动返回一个错误响应。

@nestjs/zod 是用于 NestJS 应用程序的数据验证插件,结合 Zod 进行类型安全的验证。首先安装 @nestjs/zodzod

npm install @nestjs/zod zod

然后,可以在 DTO (数据传输对象) 中使用 Zod 模式进行数据验证。例如:

import { z } from 'zod';
import { ParseZodDto } from '@nestjs/zod';

const userSchema = z.object({
  name: z.string(),
  age: z.number().min(18),
});

export class UserDto extends ParseZodDto(userSchema) {}

控制器中使用该 DTO:

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Post('users')
  createUser(@Body() dto: UserDto) {
    // 处理业务逻辑
  }
}

这样,在调用 createUser 方法时,会自动验证请求体是否符合 UserDto 定义的模式。

回到顶部