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日

相关文章

  • 在JavaScript中如何使用宏详解

    当我们使用JavaScript编写大型应用时,经常会遇到需要多次使用同一段代码的情况。在这种情况下,使用宏(Macro)可以减少代码中的重复,使代码更加简洁和易于维护。 使用宏的基本语法 在JavaScript中,使用宏可以通过define方法实现。其基本语法如下: // 定义宏 define(‘宏名’, function() { // 宏代码 }); //…

    node js 2023年6月8日
    00
  • 在node中使用jwt签发与验证token的方法

    下面是使用Node.js实现JWT签发和验证的完整攻略: 什么是JWT JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全地将信息作为JSON对象传输。此信息可以被验证和信任,因为它是数字签名的。JWT通常用于身份验证和授权。 JWT由三个部分组成,它们分别是头部(Header)、载荷(Payload)和签名(Sig…

    node js 2023年6月8日
    00
  • nodejs学习笔记之路由

    对于“nodejs学习笔记之路由”的详细讲解,我将分以下几个部分来讲解:路由基础知识、路由的实现方法和两个示例说明。 路由基础知识 在Web开发中,路由用于描述URL与后端代码之间的映射关系。通俗的讲,就是将不同的URL路径匹配到相应的处理函数进行处理。常见的路由模式有两种: 基于路径的路由模式,例如/index、/about; 基于参数的路由模式,例如/u…

    node js 2023年6月8日
    00
  • Nodejs极简入门教程(三):进程

    下面是Nodejs极简入门教程(三):进程的详细讲解攻略。 什么是进程 在操作系统中,进程是指正在运行的程序。它是一个独立的执行单元,一个程序会启动一个或多个进程。每个进程都是由操作系统来管理和调度的。 进程的特点: 独立性:进程的执行是互相独立的,一个进程不会影响另一个进程。 动态性:进程的创建和撤销都是动态的,一个进程可以创建另一个进程,同时也可以被终止…

    node js 2023年6月8日
    00
  • Node.js定时任务之node-schedule使用详解

    Node.js定时任务是常见的应用场景之一,可以用来实现定时发送邮件、定时备份数据库、定时爬虫等多种功能。node-schedule是一个可以非常方便地实现定时任务的Node.js第三方模块。 安装node-schedule 在开始之前,需要先安装node-schedule,可以通过npm进行安装: npm install node-schedule –s…

    node js 2023年6月8日
    00
  • Webpack 实现 Node.js 代码热替换

    Webpack 实现 Node.js 代码热替换是一种高效的开发方式,在开发过程中可以实时的修改代码,并及时看到修改的效果。下面将详细介绍如何实现Node.js代码的热替换。 1. 安装依赖 首先需要安装 webpack、webpack-dev-middleware 和 webpack-hot-middleware,我们可以使用下面的命令来安装: npm i…

    node js 2023年6月8日
    00
  • node中http模块的使用及执行流程

    当我们需要在node应用中进行HTTP通信(例如发送HTTP请求或创建HTTP服务器)时,可以使用node自带的HTTP模块(即”http”模块)。在本攻略中,我们将深入探讨http模块,包括其基本API、执行流程等。 http模块 在node中,我们可以使用以下代码来引入http模块: const http = require(‘http’); http模…

    node js 2023年6月8日
    00
  • NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解

    请看下面的攻略 NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解 1. 下载安装包 进入NodeJS官网(https://nodejs.org/en/),下载对应系统的安装包,本攻略以windows版本为例。 2. 安装NodeJS 双击下载好的安装包,按照提示进行安装。安装完成后,在命令行中输入以下命令,如果能够正常输出版本号,则表…

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