Mongoose 嵌套 ObjectId 数组验证 Dto

Bra*_*rse 3 javascript validation dto mongoose mongodb

我有一个 Dto,如下所示:

import { Type } from "class-transformer";
import { ArrayMinSize, IsArray, ValidateNested} from "class-validator";
import { ObjectId } from "mongoose";

export class MongoIdDto {
    @IsArray()
    @ValidateNested({each: true})
    @ArrayMinSize(1)
    @Type(() => ObjectId)
    ids: ObjectId[]
}
Run Code Online (Sandbox Code Playgroud)

但这给我带来了一个错误: 'ObjectId' only refers to a type, but is being used as a value here.

这个错误是怎么发生的呢?

Bra*_*rse 6

这是一个常见的导入错误:

ObjectId 可以从 mongoose 和 mongoDB 导入。

猫鼬导入是一个类型

mongodb 导入是 bson ObjectId 类型的类表示

因此,要解决此问题,请将导入更改为: import { ObjectId } from "mongodb";

但实际上有一个选项可以用来验证 MongoIds:

export class MongoIdArrayDto {
    @IsMongoId({each: true})
    @ArrayMinSize(1)
    ids: ObjectId[]
}
Run Code Online (Sandbox Code Playgroud)