我有一个使用静态URL服务的端点/ getDocument /:documentId 我已经设置了带有验证的路径对象,并且当使用documentId调用端点时,一切都很好。当我退出documentId时,出现404错误,它没有从@IsNotEmpty消息中获取消息。当我将端点转换为使用@Query时,会收到我期望的消息。
服务
@Controller('service') // Define this class as a controller
export class Controller {
constructor() {}
// Gets all prescriptions with pagination
@Get('getDocument/:documentId')
async getDocument(
@Res() res: Response,
@Param() params: Path,
@Headers() headers: Headers
): Promise<any> {
...
这是我收到的消息
"message": "Cannot GET /service/getDocument/"
我的dto路径
import { IsString, IsNotEmpty } from 'class-validator';
import { ApiModelProperty } from '@nestjs/swagger';
export class Path {
@IsString()
@IsNotEmpty({ message: 'documentId required in url as rest param <serviceURL>/<endpoint>/<documentId>' })
@ApiModelProperty({
required: true,
description: 'document reference id'
})
documentId: string;
}
当我将端点转换为使用@Query时,得到了预期的响应。状态422和来自dto的此消息
更新后的控制器
@Get('getDocument')
async getDocument(
@Res() res: Response,
@Query() params: Path,
@Headers() headers: Headers
): Promise<any> {
响应
{
"errors": [
"documentId required in url as rest param <serviceURL>/<endpoint>/<documentId>",
"documentId must be a string"
]
}
答案 0 :(得分:-1)
您不应使用“ IsNotEmpty”验证参数。对于您而言,由于路由路径为“ getDocument /:documentId”,控制器无法处理空的documentId。您也不应该使用“ IsString”对其进行验证-始终如此。但是,例如,您可能想验证长度。