如何在 @nestjs/mongoose 模式中设置枚举

Muh*_*afa 10 nestjs nestjs-mongoose

这是我的架构,我想将角色设置为枚举

@Prop({ 必需: true }) 名称: 字符串;

@Prop({ 必需: true }) 电子邮件: 字符串;

@Prop({ 必需: true }) 密码: 字符串;

@Prop() 作用:字符串;

这就是我以前在猫鼬中所做的

role: {
  type: String,
  enum: roles,
  default: 'user',
},
Run Code Online (Sandbox Code Playgroud)

const 角色 = ['用户', '管理员'];

Dez*_*ley 20

设置枚举的正确方法如下:

    @Prop({ type: String, enum: Role })
    role: Role
Run Code Online (Sandbox Code Playgroud)

或者:

    @Prop({ type: String, enum: Role, default: Role.User })
    role: Role
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以实现Mongoose模式验证和TypeScript运行时数据验证。如果省略装饰器内的配置,@Prop()您可以role通过将其强制转换为 Role 枚举来将任何值插入到该字段中:

    {
      role: 'blabla' as Role
    }
Run Code Online (Sandbox Code Playgroud)

PS: 在以前的版本中,NestJs您必须在数组中列出支持的枚举。看到这个问题


Exo*_*Exo 8

你需要先创建一个枚举:

enum Role {
  User, //or User = "user",
  Admin, // or Admin = "admin",
}
Run Code Online (Sandbox Code Playgroud)

然后将其设置为数据类型

@Prop()
role: Role
Run Code Online (Sandbox Code Playgroud)