nestjs系列 - controller层的搭建
type
status
date
slug
summary
tags
category
icon
password

Controller层的搭建

 
 

请求方法

@Get
@Get('/adcode/:id')
:name 可以自定义params参数
@Put
@Put(’/ddd*dd’)
通配符
@Post
@Detele
@HttpCode
@HttpCode(204)
改变状态码,例如正常响应是200,可以通过它改成204
@Header
@Header('Cache-Control', 'no-store')
@Redirect
@Redirect('https://nestjs.com', 301)
重定向

请求参数

 
@Request(), @Req()
req
请求数据
@Response(), @Res()*
res
响应数据 !!!! @Res({passthrough: true}) res: Response 必须要加passthrough,不如就需要使用res.json(xxx)的方式返回数据给前台
@Next()
next
@Session()
req.session
@Param(key?: string)
req.params / req.params[key]
请求方法里面定义的参数 例如 @Get(”/:id”),id就是其中一个参数。
@Body(key?: string)
req.body / req.body[key]
请求体的body数据
@Query(key?: string)
req.query / req.query[key]
查询参数。例如: /get?sort=desc sort就是其中一个参数,value是desc
@Headers(name?: string)
req.headers / req.headers[name]
@Ip()
req.ip
@HostParam()
req.hosts
 
 

请求数据的检验

 
Nestjs的Controller可以对 @Param @Body @Query 传入的数据做检查。
 
下面是框架中自带的数据校验器
  • ValidationPipe
  • ParseIntPipe
  • ParseBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
 

配合class-validator实现DTO数据自动校验

 
首先需要安装相关库
main.ts启用管道 app.useGlobalPipes(new ValidationPipe());
然后,给dto类属性加上class-validator的装饰器
再在Controller方法的参数TS定义dto类型,就可以自动检查
 

class-validator的装饰器用法

Decorator
Description
Common validation decorators
@IsDefined(value: any)
Checks if value is defined (!== undefined, !== null). This is the only decorator that ignores skipMissingProperties option.
@IsOptional()
Checks if given value is empty (=== null, === undefined) and if so, ignores all the validators on the property.
@Equals(comparison: any)
Checks if value equals ("===") comparison.
@NotEquals(comparison: any)
Checks if value not equal ("!==") comparison.
@IsEmpty()
Checks if given value is empty (=== '', === null, === undefined).
@IsNotEmpty()
Checks if given value is not empty (!== '', !== null, !== undefined).
@IsIn(values: any[])
Checks if value is in an array of allowed values.
@IsNotIn(values: any[])
Checks if value is not in an array of disallowed values.
Type validation decorators
@IsBoolean()
Checks if a value is a boolean.
@IsDate()
Checks if the value is a date.
@IsString()
Checks if the value is a string.
@IsNumber(options: IsNumberOptions)
Checks if the value is a number.
@IsInt()
Checks if the value is an integer number.
@IsArray()
Checks if the value is an array
@IsEnum(entity: object)
Checks if the value is a valid enum
Number validation decorators
@IsDivisibleBy(num: number)
Checks if the value is a number that's divisible by another.
@IsPositive()
Checks if the value is a positive number greater than zero.
@IsNegative()
Checks if the value is a negative number smaller than zero.
@Min(min: number)
Checks if the given number is greater than or equal to given number.
@Max(max: number)
Checks if the given number is less than or equal to given number.
Date validation decorators
@MinDate(date: Date | (() => Date))
Checks if the value is a date that's after the specified date.
@MaxDate(date: Date | (() => Date))
Checks if the value is a date that's before the specified date.
String-type validation decorators
@IsBooleanString()
Checks if a string is a boolean (e.g. is "true" or "false" or "1", "0").
@IsDateString()
Alias for @IsISO8601().
@IsNumberString(options?: IsNumericOptions)
Checks if a string is a number.
String validation decorators
@Contains(seed: string)
Checks if the string contains the seed.
@NotContains(seed: string)
Checks if the string not contains the seed.
@IsAlpha()
Checks if the string contains only letters (a-zA-Z).
@IsAlphanumeric()
Checks if the string contains only letters and numbers.
@IsDecimal(options?: IsDecimalOptions)
Checks if the string is a valid decimal value. Default IsDecimalOptions are force_decimal=Falsedecimal_digits: '1,'locale: 'en-US'
@IsAscii()
Checks if the string contains ASCII chars only.
@IsBase32()
Checks if a string is base32 encoded.
@IsBase58()
Checks if a string is base58 encoded.
@IsBase64(options?: IsBase64Options)
Checks if a string is base64 encoded.
@IsIBAN()
Checks if a string is a IBAN (International Bank Account Number).
@IsBIC()
Checks if a string is a BIC (Bank Identification Code) or SWIFT code.
@IsByteLength(min: number, max?: number)
Checks if the string's length (in bytes) falls in a range.
@IsCreditCard()
Checks if the string is a credit card.
@IsCurrency(options?: IsCurrencyOptions)
Checks if the string is a valid currency amount.
@IsISO4217CurrencyCode()
Checks if the string is an ISO 4217 currency code.
@IsEthereumAddress()
Checks if the string is an Ethereum address using basic regex. Does not validate address checksums.
@IsBtcAddress()
Checks if the string is a valid BTC address.
@IsDataURI()
Checks if the string is a data uri format.
@IsEmail(options?: IsEmailOptions)
Checks if the string is an email.
@IsFQDN(options?: IsFQDNOptions)
Checks if the string is a fully qualified domain name (e.g. domain.com).
@IsFullWidth()
Checks if the string contains any full-width chars.
@IsHalfWidth()
Checks if the string contains any half-width chars.
@IsVariableWidth()
Checks if the string contains a mixture of full and half-width chars.
@IsHexColor()
Checks if the string is a hexadecimal color.
@IsHSL()
Checks if the string is an HSL color based on CSS Colors Level 4 specification.
@IsRgbColor(options?: IsRgbOptions)
Checks if the string is a rgb or rgba color.
@IsIdentityCard(locale?: string)
Checks if the string is a valid identity card code.
@IsPassportNumber(countryCode?: string)
Checks if the string is a valid passport number relative to a specific country code.
@IsPostalCode(locale?: string)
Checks if the string is a postal code.
@IsHexadecimal()
Checks if the string is a hexadecimal number.
@IsOctal()
Checks if the string is a octal number.
@IsMACAddress(options?: IsMACAddressOptions)
Checks if the string is a MAC Address.
@IsIP(version?: "4"|"6")
Checks if the string is an IP (version 4 or 6).
@IsPort()
Checks if the string is a valid port number.
@IsISBN(version?: "10"|"13")
Checks if the string is an ISBN (version 10 or 13).
@IsEAN()
Checks if the string is an if the string is an EAN (European Article Number).
@IsISIN()
Checks if the string is an ISIN (stock/security identifier).
@IsISO8601(options?: IsISO8601Options)
Checks if the string is a valid ISO 8601 date format. Use the option strict = true for additional checks for a valid date.
@IsJSON()
Checks if the string is valid JSON.
@IsJWT()
Checks if the string is valid JWT.
@IsObject()
Checks if the object is valid Object (null, functions, arrays will return false).
@IsNotEmptyObject()
Checks if the object is not empty.
@IsLowercase()
Checks if the string is lowercase.
@IsLatLong()
Checks if the string is a valid latitude-longitude coordinate in the format lat, long.
@IsLatitude()
Checks if the string or number is a valid latitude coordinate.
@IsLongitude()
Checks if the string or number is a valid longitude coordinate.
@IsMobilePhone(locale: string)
Checks if the string is a mobile phone number.
@IsISO31661Alpha2()
Checks if the string is a valid ISO 3166-1 alpha-2 officially assigned country code.
@IsISO31661Alpha3()
Checks if the string is a valid ISO 3166-1 alpha-3 officially assigned country code.
@IsLocale()
Checks if the string is a locale.
@IsPhoneNumber(region: string)
Checks if the string is a valid phone number using libphonenumber-js.
@IsMongoId()
Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId.
@IsMultibyte()
Checks if the string contains one or more multibyte chars.
@IsNumberString(options?: IsNumericOptions)
Checks if the string is numeric.
@IsSurrogatePair()
Checks if the string contains any surrogate pairs chars.
@IsTaxId()
Checks if the string is a valid tax ID. Default locale is en-US.
@IsUrl(options?: IsURLOptions)
Checks if the string is a URL.
@IsMagnetURI()
Checks if the string is a magnet uri format.
@IsUUID(version?: UUIDVersion)
Checks if the string is a UUID (version 3, 4, 5 or all ).
@IsFirebasePushId()
Checks if the string is a Firebase Push ID
@IsUppercase()
Checks if the string is uppercase.
@Length(min: number, max?: number)
Checks if the string's length falls in a range.
@MinLength(min: number)
Checks if the string's length is not less than given number.
@MaxLength(max: number)
Checks if the string's length is not more than given number.
@Matches(pattern: RegExp, modifiers?: string)
Checks if string matches the pattern. Either matches('foo', /foo/i) or matches('foo', 'foo', 'i').
@IsMilitaryTime()
Checks if the string is a valid representation of military time in the format HH:MM.
@IsTimeZone()
Checks if the string represents a valid IANA time-zone.
@IsHash(algorithm: string)
Checks if the string is a hash The following types are supported:md4md5sha1sha256sha384sha512ripemd128ripemd160tiger128tiger160tiger192crc32crc32b.
@IsMimeType()
Checks if the string matches to a valid MIME type format
@IsSemVer()
Checks if the string is a Semantic Versioning Specification (SemVer).
@IsISSN(options?: IsISSNOptions)
Checks if the string is a ISSN.
@IsISRC()
Checks if the string is a ISRC.
@IsRFC3339()
Checks if the string is a valid RFC 3339 date.
@IsStrongPassword(options?: IsStrongPasswordOptions)
Checks if the string is a strong password.
Array validation decorators
@ArrayContains(values: any[])
Checks if array contains all values from the given array of values.
@ArrayNotContains(values: any[])
Checks if array does not contain any of the given values.
@ArrayNotEmpty()
Checks if given array is not empty.
@ArrayMinSize(min: number)
Checks if the array's length is greater than or equal to the specified number.
@ArrayMaxSize(max: number)
Checks if the array's length is less or equal to the specified number.
@ArrayUnique(identifier?: (o) => any)
Checks if all array's values are unique. Comparison for objects is reference-based. Optional function can be speciefied which return value will be used for the comparsion.
Object validation decorators
@IsInstance(value: any)
Checks if the property is an instance of the passed value.
Other decorators
@Allow()
Prevent stripping off the property when no other constraint is specified for it.
 
官方文档:
 
 

自定义检查Pipe

有的时候,我希望使用Zod或者Joi的强大数据检查功能,所以有做一下这定义装饰器,用于接受Zod schame 数据的校验
 
就可以十分方便地使用它了
 
 
 

返回规范封装

 
为了接口返回的统一,编写了R
在返回的时候调用R.ok 或者 R.error
 
写一个管道拦截器?
之前全局处理?
 

dto使用Swagger

查看独立的Page :
 

Rest 封装

 

 
 
 
 
 

© ittat 2016-2025