javascript - 在nestjs中验证多层嵌套对象
问题描述
我试图在 nestJs 中使用 classValidator 装饰器来验证以下类型的传入请求
{
address: string
location: {
longitude: string,
latitude : string
}
}
. 问题是它仅限于一层 nestedObject 。下面的一个有效
class ProjectLocation {
@IsString()
address: string;
}
export class CreateProjectDto {
@ValidateNested({each:true})
@Type(()=>ProjectLocation)
location:ProjectLocation
}
但是当另一个嵌套层添加到 ProjectLocation 时,它不起作用,而且您也不能在 ProjectLocation 中使用 @ValidatedNested 向其中添加另一个类 Type 。
错误:没有重载匹配此调用。
解决方案
按预期工作,请考虑以下事项:
class SomeNestedObject {
@IsString()
someProp: string;
}
class ProjectLocation {
@IsString()
longitude: string;
@IsString()
latitude: string;
@ValidateNested()
@IsNotEmpty()
@Type(() => SomeNestedObject)
someNestedObject: SomeNestedObject;
}
export class CreateProjectDto {
@IsString()
address: string;
@ValidateNested()
@Type(() => ProjectLocation)
location: ProjectLocation;
}
请注意,如果缺少道具,我将使用IsNotEmpty
on来处理此案。someNestedObject
以下是正确验证的无效请求的两个示例:
示例 1:
Request-Body:
{
"address": "abc",
"location": {
"longitude": "123",
"latitude" : "456",
"someNestedObject": {}
}
}
Response:
{
"statusCode": 400,
"message": [
"location.someNestedObject.someProp should not be empty"
],
"error": "Bad Request"
}
示例 2:
Request-Body:
{
"address": "abc",
"location": {
"longitude": "123",
"latitude" : "456"
}
}
Response:
{
"statusCode": 400,
"message": [
"location.someNestedObject should not be empty"
],
"error": "Bad Request"
}
推荐阅读
- python - 根据条件的相等性在数据框中查找匹配的人对或人链
- catel - 即使将内容网格命名为“__catelInnerWrapper”,Catel 也会在视图模型网格中包装用户控件内容
- node.js - NodeJS process.pid 在服务器实例之间是相同的
- robotframework - 运行 Selenoid Grid 并在浏览器打开时定期获得 ERR_NETWORK_CHANGED
- matlab - Matlab`unstack`:可以安全地假设新列的排序?
- android - 安卓短信权限限制
- reactjs - 反应从孩子到父母问题的传递道具
- python - Kivy - 如何将项目从 ScrollView 拖放到另一个布局?
- excel - 在 Excel 中使用 AND 运算符和多个条件进行条件格式设置
- html - 如何对齐定价表并将它们与 bootstrap 和 scss 居中