我从客户端获得了此用户输入,我正在使用Joi进行后端验证。
const Joi = require("joi")
const schema = Joi.array().items(
Joi.object().required().keys({
name: 'filter_list',
value: Joi.array().items(
Joi.object().required().keys({
id: 'popular_filters',
value: Joi.array().required().items(
Joi.object().required().keys({
id: Joi.string().required(),
name: Joi.string().required(),
items: Joi.array().items(
Joi.object().keys({
id: Joi.string().required(),
name: Joi.string().required()
})
)
})
)
})
)
})
);
// Return result.
const result = Joi.validate([
{
name: 'filter_list',
value: [{
id: 'popular_filters',
value: [{
id: '1',
name: 'Gym',
items: [{
id: 1, // bad error msg
name: 'x'
}]
}]
}]
}
], schema);
console.log('error: ', result.error);
演示:https://runkit.com/eldyvoon/5d7b59184bd7b300144a2730
我遇到
错误Error: "value" at position 0 fails because [child "value" fails because ["value" at position 0 fails because [child "value" fails because ["value" at position 0 fails because [child "items" fails because ["items" at position 0 fails because [child "id" fails because ["id" must be a string]]]]]]]]
作者:乔。我不想提供自定义错误消息,但Joi应该给我类似id should be in string not number
答案 0 :(得分:0)
在定义架构时,只需在链中提供错误功能即可。
Joi.object().keys({
id: Joi.string().required().error(new Error('id should be in string not number')),
name: Joi.string().required()
})