4.nestjs:請求入?yún)⑿r?/h1>

在整合swagger中,雖然入?yún)㈦m然使用了dto,但是我們使用instanceof發(fā)現(xiàn)它并不是我們dto的instance


image.png

如果想要達到dto校驗的效果需要自己配置兜材,這里不同的配置會有不同的效果,這里最終的效果是這樣的:前端傳入的字段必須在dto中存在据沈,如果不存在就會被忽略掉,如果字段存在但是類型不一樣則會報錯,嵌套dto和數(shù)組的配置有些特殊需要注意.

1.首先安裝校驗工具包

npm i --save class-validator class-transformer

2.在入?yún)equest dto上加上對應的裝飾器

import { ApiProperty } from "@nestjs/swagger"
import { Type } from "class-transformer"
import { IsNumber, IsOptional, IsString, ValidateNested } from "class-validator"

export class UserHobby{
    @ApiProperty()
    //數(shù)組的配置要加上each:true
    @IsString({each:true})
    hobbyName:string[]
}

export class UserRequestDto{
    //如果該字段前端可能傳入戒悠,也可能不傳入則使用@IsOptional()
    @IsOptional()
    @IsString()
    @ApiProperty()
    name:string

    @IsNumber()
    @ApiProperty()
    age:number

    //如果是嵌套類型是數(shù)組可以在ValidateNested配置each:true
    //@Type 指定嵌套類型
    @ValidateNested()
    @Type(() => UserHobby)
    @ApiProperty()
    hobbyName:UserHobby
}

3.在main.ts配置全局使用validate該功能

app.useGlobalPipes

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter()
  );
  const options = new DocumentBuilder()
    .setTitle('nest-demo')
    .setDescription('The nest-demo API description')
    .setVersion('1.0')
    .addTag('nest-demo')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api', app, document);
  //全局使用dto校驗
  app.useGlobalPipes(
    new ValidationPipe({
      whitelist:true,
      transform:true
    })
  );
  await app.listen(3000, '0.0.0.0');
  console.warn(`app start listen on 3000`)
}
bootstrap();

whitelist:true, 作用是將傳入的參數(shù)只保留使用裝飾器的字段(類似@IsNumber())
transform:true 作用是將參數(shù)轉為對應的class 的instance.

最終效果:


image.png

tips1:如果該字段前端可能傳入轧膘,也可能不傳入則使用@IsOptional()
tips2:開啟此功能將會損耗很少一部分性能
tips3: plainToInstance from 'class-transformer 此方法可以將對象轉為dto

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
禁止轉載钞螟,如需轉載請通過簡信或評論聯(lián)系作者。

  • 序言:七十年代末谎碍,一起剝皮案震驚了整個濱河市鳞滨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蟆淀,老刑警劉巖拯啦,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熔任,居然都是意外死亡褒链,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門笋敞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碱蒙,“玉大人,你說我怎么就攤上這事夯巷∪停” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵趁餐,是天一觀的道長喷兼。 經(jīng)常有香客問我,道長后雷,這世上最難降的妖魔是什么季惯? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任吠各,我火速辦了婚禮,結果婚禮上勉抓,老公的妹妹穿的比我還像新娘贾漏。我一直安慰自己,他們只是感情好藕筋,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布纵散。 她就那樣靜靜地躺著,像睡著了一般隐圾。 火紅的嫁衣襯著肌膚如雪伍掀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天暇藏,我揣著相機與錄音蜜笤,去河邊找鬼。 笑死盐碱,一個胖子當著我的面吹牛把兔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甸各,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼垛贤,長吁一口氣:“原來是場噩夢啊……” “哼焰坪!你這毒婦竟也來了趣倾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤某饰,失蹤者是張志新(化名)和其女友劉穎儒恋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黔漂,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡诫尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了炬守。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牧嫉。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖减途,靈堂內(nèi)的尸體忽然破棺而出酣藻,到底是詐尸還是另有隱情,我是刑警寧澤鳍置,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布辽剧,位于F島的核電站,受9級特大地震影響税产,放射性物質(zhì)發(fā)生泄漏怕轿。R本人自食惡果不足惜偷崩,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撞羽。 院中可真熱鬧阐斜,春花似錦、人聲如沸诀紊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渡紫。三九已至到推,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惕澎,已是汗流浹背莉测。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唧喉,地道東北人捣卤。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像八孝,于是被迫代替她去往敵國和親董朝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容