如何在 url 参数中传递日期以及如何使用 class-validator 对其进行验证?

How to pass a Date in url param and how to validate it with class-validator?

我正在尝试在我的 Nest.js api 中验证日期参数(使用 class-验证器);以下是我所拥有的:

class DateValidate {
  @IsDate()
  date: Date;
}
  @Get('day/:day')
  getDayMealsPlan(@Param('day') day: DateValidate): any {
    return day;
  }

我在 URL 中传递日期参数,如下所示:

localhost:3000/meals/day/2022-03-06T11:00:00.000Z

它给我一个 400 错误:

{
    "statusCode": 400,
    "message": [
        "date must be a Date instance"
    ],
    "error": "Bad Request"
}

我有一个由两部分组成的问题:

  1. 如何验证日期?
  2. 日期在参数中看起来如何?这是正确的方法吗:2022-03-06T11:00:00.000Z

我认为应该是:

@Get('day/:date') // <
getDayMealsPlan(@Param() o: DateValidate): any {
  return o.date
}

2022-03-06T11:00:00.000Z这个值是String类型。这就是 class-validator 抱怨 not Date instance.

的原因

您需要告诉您将字符串格式转换为日期。

您可以使用 class-transformer 中的 Type 装饰器来实现。

class DateValidate {
  @IsDate()
  @Type(() => Date)
  day: Date;
}
@Controller('something')
export class SomethingController {
  @Get('day/:day')
  getDayMealsPlan(@Param() params: DateValidate) {
    console.log(params.day instanceof Date); // true
    return params;
  }
}