如何在 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"
}
我有一个由两部分组成的问题:
- 如何验证日期?
- 日期在参数中看起来如何?这是正确的方法吗: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;
}
}
我正在尝试在我的 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"
}
我有一个由两部分组成的问题:
- 如何验证日期?
- 日期在参数中看起来如何?这是正确的方法吗: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;
}
}