使用具有所需密钥的对象的 Joi 自定义错误消息

问题描述

我只是想处理 Joi 验证架构上的自定义消息错误我有类似的东西:

Joi.object().keys(
            analysisOptions: Joi.object()
                .required()
                .keys({
                    title: Joi.string()
                        .max(200)
                        .error(
                            new InvalidRequestError(
                                'A valid string with 200 characters or less needs to be passed as a title parameter'
                            )
                        ),analysisId: Joi.string()
                        .required()
                        .regex(/^[\w&.-]+$/)
                        .max(200)
                        .error(
                            new InvalidRequestError(
                                'A valid Id [a-zA-Z0-9_-]+ with 200 characters or less needs to be passed as an analysisId parameter'
                            )
                        ),threshold: Joi.number()
                        .error(new InvalidRequestError('A valid number needs to be passed as a threshold parameter'))
                        .default(DEFAULT_THRESHOLD)
                })
)

问题是,在测试时,如果我在模式中接收到 analysisId,每个其他键(标题和阈值)的特定问题都带有正确的错误消息。我的意思是,如果架构带有 analysisId 和超过 200 个字符的标题,我会收到附加到标题错误

但是,如果我不传递 analysisId 属性,我会收到来自父级的错误(我的意思是 analysisOptions 属性本身),告诉我:

"child \"analysisOptions\" fails because [\"analysisOptions\" is required]"

如果我将错误方法链接到 analysisOptions 键,我可以处理此错误,但在这种情况下,对象内部的所有错误都将被忽略,并且我无法为对象内部的每个不同的键抛出错误

如果我把这个:

analysisOptions: Joi.object()
                .required()
                .keys({...})
                .error(...)

然后将忽略架构中的所有自定义消息错误,对于超过 200 个字符的标题,我无法抛出特定错误

有人可以帮我吗?提前致谢:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)