我正在使用hapijs来编写微服务。我有一个API,在请求体(POST方法)中有三个参数
我打算使用JOI进行验证。验证应该是以下
如果姓氏和出生日期都是,则需要使用UserID 请求中缺席
如果没有UserID,则需要姓氏和出生日期
我试图通过以下方式实现这一目标。它似乎不起作用。
export const userRequestModel = Joi.object().keys({
lastname: Joi.string().when('uid',
{
is: undefined,
then: Joi.string().required()
}),
dob: Joi.string().when('uid',
{
is: undefined,
then: Joi.string().required()
}),
uid: Joi.string().
when('lastname',
{
is: undefined,
then: Joi.string().required()
}).
concat(Joi.string().when('dob',
{
is: undefined,
then: Joi.string().required()
}))
});
连接似乎在语法上不正确。它显示以下输入错误
类型'AlternativesSchema'的参数不能分配给'FunctionSchema'类型的参数.Property'arity'在'AlternativesSchema'类型中缺失。
答案 0 :(得分:1)
基本上,此架构会创建循环依赖。
错误:添加到组uid中的项创建了依赖项错误
......一个问题Joi没有优雅的管理方式,特别是当有两个以上的键时。可以在其他地方找到here的扩展讨论。
可能的替代方案将是:
Joi.alternatives().try(
Joi.object().keys({
lastname: Joi.string().min(1).required(),
dob: Joi.string().min(1).required(),
uid: Joi.string()
}),
Joi.object().keys({
lastname: Joi.string(),
dob: Joi.string(),
uid: Joi.string().min(1).required()
})
);
如果架构变得更复杂,那么它并不漂亮,可能会崩溃。