簡體   English   中英

如何使用 Joi 最新版本驗證枚舉字符串?

[英]How to validate Enum String with Joi latest version?

如何驗證枚舉字符串?

我曾經使用 go 與這里的建議: https://github.com/hapijs/joi/issues/1449

enum UserRole {
  Admin = 'admin',
  Staff = 'staff'
}

const validator = {
  create: Joi.object().keys({
    first_name: Joi.string().min(1),
    last_name: Joi.string()
      .min(1)
      .required(),
    password: Joi.string()
      .regex(/^[\x20-\x7E]+$/)
      .min(8)
      .max(72)
      .required(),
    role: Joi.string()
      .valid([UserRole.Admin, UserRole.Staff])
      .optional(),
    is_active: Joi.boolean().optional()
  })
};

但是現在, Error: Method no longer accepts array arguments: valid

我可以像這樣使用 Joi.any().valid() 讓它工作,希望對你有用。

const Joi = require("@hapi/joi");

const roles = ["admin", "staff"];

const schema = Joi.object({
  first_name: Joi.string().min(1),
  last_name: Joi.string()
    .min(1)
    .required(),
  password: Joi.string()
    .regex(/^[\x20-\x7E]+$/)
    .min(8)
    .max(72)
    .required(),
  role: Joi.any().valid(...roles),
  is_active: Joi.boolean().optional()
});

例子:

使用有效角色時沒有錯誤。

const { error, value } = schema.validate({
  first_name: "Magnus",
  last_name: "Carlsen",
  password: "chess/1234",
  role: "staff"
});

console.log(error); //undefined

不使用角色時不會出錯。

const { error, value } = schema.validate({
  first_name: "Magnus",
  last_name: "Carlsen",
  password: "chess/1234"
});

console.log(error); //undefined

當使用不同的角色時,它會給出驗證錯誤。

const { error, value } = schema.validate({
  first_name: "Magnus",
  last_name: "Carlsen",
  password: "chess/1234",
  role: "unknown"
});

console.log(error); // Error [ValidationError]: "role" must be one of [admin, staff]...

enum UserRole {
  Admin = 'admin',
  Staff = 'staff'
}

const validator = {
  create: Joi.object().keys({
    first_name: Joi.string().min(1),
    last_name: Joi.string()
      .min(1)
      .required(),
    password: Joi.string()
      .regex(/^[\x20-\x7E]+$/)
      .min(8)
      .max(72)
      .required(),
    role: Joi.string()
      .valid(UserRole.Admin, UserRole.Staff) // do not use an array
      .optional(),
    is_active: Joi.boolean().optional()
  })
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM