Nest.js参数校验和自定义返回数据格式详解

下面给你分享关于“Nest.js参数校验和自定义返回数据格式详解”的完整攻略。

一、参数校验

在Nest.js中,我们可以使用class-validator实现参数校验。需要在controller中使用Dto来对每个请求进行参数校验。具体流程如下:

  1. 安装class-validator和class-transformer模块,执行如下命令:
npm install class-validator class-transformer --save
  1. 编写Dto。在Dto中通过 @IsXXX() 来指定验证规则。比如:
import { IsString, IsInt, IsOptional } from 'class-validator';

export class CreateCatDto {
  @IsString()
  readonly name: string;
  @IsInt()
  readonly age: number;
  @IsOptional()
  @IsString()
  readonly breed?: string;
}
  1. 在控制器中使用Dto作为请求参数类型来对参数进行验证。比如:
import { Controller, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto): Promise<Cat> {
    return this.catsService.create(createCatDto);
  }
}
  1. 启用验证器。在Nest.js中,需要在main.ts中设置全局的验证管道。启用该管道后,所有的请求都会经过类验证器进行校验。比如:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();

至此,参数校验功能就实现了。

二、自定义返回数据格式

在Nest.js中,我们可以使用class-transformer和class-validator模块来实现自定义返回数据格式。具体流程如下:

  1. 安装class-transformer和class-validator模块,执行如下命令:
npm install class-transformer class-validator --save
  1. 配置class-transformer。在main.ts中添加如下代码:
import { ValidationPipe } from '@nestjs/common';
import { useContainer } from 'class-validator';
import { ClassSerializerInterceptor } from '@nestjs/common';
import { NestFactory, Reflector } from '@nestjs/core';
import { AppModule } from './app.module';
import { HttpExceptionFilter } from './http-exception.filter';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  //2. 配置class-transformer
  app.useGlobalInterceptors(new ClassSerializerInterceptor(
      app.get(Reflector)
  ));

  //3. 配置class-validator
  useContainer(app.select(AppModule), {
    fallbackOnErrors: true,
  });

  //1. 配置全局的验证管道
  app.useGlobalPipes(new ValidationPipe({
    whitelist: true,
    transform: true,
    forbidUnknownValues: true,
    transformOptions: {
      excludeExtraneousValues: true,
    },
  }));

  app.useGlobalFilters(new HttpExceptionFilter());
  await app.listen(3000);
}

bootstrap();
  1. 创建一个toJSON()方法并在其中使用class-transformer,将返回的数据转化为我们自己设定的格式。
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
import { Exclude, Transform } from 'class-transformer';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column()
  public firstName: string;

  @Column()
  public lastName: string;

  @Transform((params) => undefined, { toPlainOnly: true })
  @Exclude()
  @Column()
  public password: string;

  public toJSON(): any {
    const { id, firstName, lastName } = this;
    return { id, firstName, lastName };
  }
}

这里我们以User为例,删掉了password(敏感信息不应该返回给前端)。toJSON() 中自定义了返回的数据格式。

{
"id": 1,
"firstName": "John",
"lastName": "Doe"
}

这样,我们就成功地实现了自定义返回数据格式的功能。

示例:

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  async findAll(): Promise<User[]> {
    return this.usersService.findAll();
  }

  @Get(':id')
  async findOne(@Param('id') id: number): Promise<User> {
    return this.usersService.findOne(id);
  }

  @Post()
  async create(@Body() createUserDto: CreateUserDto): Promise<User> {
    return this.usersService.create(createUserDto);
  }

  @Put(':id')
  async update(@Param('id') id: number, @Body() updateUserDto: UpdateUserDto): Promise<User> {
    return this.usersService.update(id, updateUserDto);
  }

  @Delete(':id')
  async remove(@Param('id') id: number): Promise<void> {
    return this.usersService.remove(id);
  }
}

以上就是“Nest.js参数校验和自定义返回数据格式详解”的完整攻略啦。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nest.js参数校验和自定义返回数据格式详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • nodejs进阶(6)—连接MySQL数据库示例

    Node.js 是一个非常流行的 JavaScript 运行时环境,可以用于开发服务器端应用程序。其中连接 MySQL 数据库是非常常见的需求,这里提供一个简单的示例来完成该操作。 步骤一:安装MySQL数据库 首先,需要在本地环境中安装 MySQL 数据库,以便连接和测试。MySQL 官方提供了可用于大多数操作系统的安装包和安装说明。一般来说,可以选择适合…

    node js 2023年6月8日
    00
  • 详解用node.js实现简单的反向代理

    下面是详解用node.js实现简单的反向代理的完整攻略: 什么是反向代理 反向代理是一种服务器代理技术,一个代理服务器可以根据客户端的请求,代理并转发到内部服务器上处理,然后把处理结果再返回给客户端。 例如,一个公司内部有多个Web服务器,反向代理服务器可以通过多个Web服务器的负载均衡来保证服务的可用性。客户端不需要知道后面连接了哪些服务器,反向代理服务器…

    node js 2023年6月8日
    00
  • JavaScript Array Flatten 与递归使用介绍

    JavaScript Array Flatten 与递归使用介绍 在JavaScript中,数组扁平化(Flatten Array)指的是将多维嵌套的数组转换为一维数组的过程。这个过程可以使用循环或递归来完成,但使用递归来实现数组扁平化更加灵活和高效。在本文中,我们将详细介绍JavaScript中数组扁平化的实现方法,并提供几个实例来说明。 循环实现数组扁平…

    node js 2023年6月8日
    00
  • nodejs前端模板引擎swig入门详解

    让我来详细讲解一下“nodejs前端模板引擎swig入门详解”的完整攻略。 标题 nodejs前端模板引擎swig入门详解 简介 Swig是一款简单、快速、可扩展的 JavaScript 模板引擎。Swig能够在Node.js和浏览器中运行,因此它不仅适用于服务器端的视图,还适用于浏览器端的JavaScript模板引擎。Swig具有一个内置缓存系统,能显著提…

    node js 2023年6月8日
    00
  • node中的cookie的具体使用

    接下来我将为你详细介绍“Node.js中的Cookie的具体使用”的攻略。 什么是Cookie 在Web开发中,Cookie是一种由服务器通过HTTP协议写入客户端计算机中的小文件,它可以保存一些用户身份验证、页面定位、状态保持等相关信息。之后客户端每次请求页面都会携带该Cookie信息,从而完成用户身份的认证和页面状态的保持。 Node.js中的Cooki…

    node js 2023年6月8日
    00
  • discuz中用到的javascript函数解析 原创

    Discuz 中用到的 JavaScript 函数解析 概述 Discuz 是一套优秀的 PHP 论坛系统,其中用到了不少 JavaScript 功能来提升用户体验和交互性。对于开发者来说,掌握 Discuz 中用到的 JavaScript 函数非常重要。本文将详细讲解 Discuz 中常用的 JavaScript 函数及其用法。 常用函数 1. showM…

    node js 2023年6月8日
    00
  • node中使用es5/6以及支持性与性能对比

    使用ES5/ES6是Node.js开发中的常见需求,本攻略将详细讲解如何在Node.js中使用ES5/ES6,同时对ES5/ES6兼容性和性能进行对比分析。 支持ES6 Node.js会逐渐加入ES6支持,但仍有一些ES6特性需要额外的设置来启用。对于绝大部分情况,可以使用标准的ES6函数,例如: const add = (a, b) => a + b…

    node js 2023年6月8日
    00
  • vue中eslintrc.js配置最详细介绍

    下面我来详细讲解一下“Vue中eslintrc.js配置最详细介绍”的攻略。 1. 什么是ESLint 首先,ESLint是一个代码检查工具,可以用来规范Javascript代码。其可以通过检测潜在的问题以及风格问题来确保代码的一致性和可读性。 2. ESLint在Vue项目中的作用 在Vue项目中使用ESLint可以对Vue组件以及JavaScript代码…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部