![](/img/trans.png)
[英]How to validate that a string is not equal to another (blacklist) with 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.