![](/img/trans.png)
[英]Is there a way to validate strings that represent nested object keys in Joi?
[英]Joi validate ignores nested keys
這是我的Joi驗證:
let schema = Joi.object().keys({
personal_info: Joi.object().keys({
first_name: Joi.string().min(2).max(10).regex(Regex.alphabeta, 'alphabeta').required().error(JoiCustomErrors),
last_name: Joi.string().min(2).max(10).regex(Regex.alphabeta, 'alphabeta').required().error(JoiCustomErrors),
phone: Joi.string().min(10).max(10).regex(Regex.num, 'num').required().error(JoiCustomErrors),
nickname: Joi.string().min(3).max(12).regex(Regex.alphanum, 'alphanum').required().error(JoiCustomErrors),
birthday: Joi.date().max(`01-01-${new Date().getFullYear()-8}`).required().error(JoiCustomErrors),
IDNumber: Joi.string().min(9).max(9).regex(Regex.num, 'num').required().error(JoiCustomErrors),
address: Joi.object().keys({
city: Joi.string().valid(Cities).required().error(JoiCustomErrors),
street: Joi.string().min(2).max(15).regex(Regex.alphabeta, 'alphabeta').required().error(JoiCustomErrors),
house_number: Joi.string().min(1).max(5).regex(Regex.alphanum, 'alphanum').error(JoiCustomErrors)
})
}),
permission_level: Joi.number().min(1).max(9).required().error(JoiCustomErrors)
});
Joi.validate(req.body, schema, { abortEarly: false }, (err) => {
if (err) return cast.joiError(err);
return create_employee(result);
});
說明:
personal_info
對象內部的所有嵌套鍵都不會得到檢查。 這意味着-如果我采用first_name
並將其放置在parent上(而不是personal_info
下),則架構驗證器將對其進行檢查-應該如此。
我究竟做錯了什么?
在personal_info模式對象上使用.required(),然后它將按您期望的那樣工作,
'use strict';
const Joi = require('joi');
let schema = Joi.object().keys({
personal_info: Joi.object().keys({
first_name: Joi.string().min(2).max(10).required(),
last_name: Joi.string().min(2).max(10).required()
}).required(),
permission_level: Joi.number().min(1).max(9).required()
});
const req = {
personal_info: {
first_name: 'AAAA',
last_name: 'CCCCCC'
},
permission_level: 2
};
Joi.validate(req, schema, (err) => {
console.log(err);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.