0

我有一个端点,它正在使用一个安静的 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/"

我的路径

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"
    ]
}
4

1 回答 1

-1

您不应该使用“IsNotEmpty”验证参数。在您的情况下,由于路由路径“getDocument/:documentId”,控制器无法处理空 documentId。您也不应该使用 'IsString' 来验证它——它总是如此。但是,例如,您可能想要验证长度。

于 2019-08-06T08:52:51.993 回答