inf*_*dev 4 javascript node.js express typescript nestjs
我正在启动NestJS(强大的框架!)
我将使我的route Query参数成为必需,否则将引发错误400。
@Controller('')
export class AppController {
constructor() {}
@Get('/businessdata/messages')
public async getAllMessages(
@Query('startDate', ValidateDate) startDate: string,
@Query('endDate', ValidateDate) endDate: string,
): Promise<string> {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用管道来确定参数是否有效,但不能确定该参数是否存在,而且我不确定是否为此而设计了管道。
那么,如果没有抛出错误,我该如何检查NestJS是否存在我的参数?
小智 11
NestJS 不提供@Query
检测 中未定义值的装饰器(如 )request.query[key]
。
您可以为此编写自定义装饰器:
import { createParamDecorator, ExecutionContext, BadRequestException } from '@nestjs/common'
export const QueryRequired = createParamDecorator(
(key: string, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest()
const value = request.query[key]
if (value === undefined) {
throw new BadRequestException(`Missing required query param: '${key}'`)
}
return value
}
)
Run Code Online (Sandbox Code Playgroud)
然后像使用@QueryRequired
装饰器一样使用@Query
:
@Get()
async someMethod(@QueryRequired('requiredParam') requiredParam: string): Promise<any> {
...
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用class-validator
。烟斗绝对是为此做的!
示例: create-user.dto.ts
import { IsNotEmpty } from 'class-validator';
export class CreateUserDto {
@IsNotEmpty()
password: string;
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参见class-validator
文档:https :
//github.com/typestack/class-validator
和NestJS Pipes&Validation文档:https : //docs.nestjs.com/pipes https://docs.nestjs.com/techniques/validation
归档时间: |
|
查看次数: |
2819 次 |
最近记录: |