
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=False , decimal_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: md4 , md5 , sha1 , sha256 , sha384 , sha512 , ripemd128 , ripemd160 , tiger128 , tiger160 , tiger192 , crc32 , crc32b . |
@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 :