[英]Can't run .value() on non-existant property of non-existant object
[英]How To Make Joi Warning On Non-Existant property
如果特定元素不存在,我如何使用 Joi 抛出警告而不是错误?
我的代码:
const Joi = require('joi');
const schema = Joi.object({
username: Joi.string()
.alphanum()
.min(3)
.max(30)
.required(),
birth_year: Joi
.number()
.min(2000)
.warn()
});
console.log({ error, warning, value } = schema.validate({ username: 'abc', birth_year: 1994 }));
console.log({ error, warning, value } = schema.validate({ username: 'abc'}));
当出生年份不符合我要求的最低要求时,我可以成功看到警告
'"birth_year" 必须大于或等于 2000'
但是,如果出生年份不存在,我也想警告。
目前我没有收到警告或错误。 如果我将.required()
添加到出生年份模式,如果出生年份不存在,它将出错。 我试过这样做:
birth_year: Joi
.number()
.min(2000)
.warn()
.required()
.warn()
然而,这会产生一个运行时错误,因为.warn() 终止了架构选项。 我也尝试将 moving.required 作为第二个选项,但它再次出错,而不是警告。
使用 warn() 和 validateAsync() 方法并将 warnings 选项设置为 true:
const schema = Joi.object({
username: Joi.string()
.alphanum()
.min(3)
.max(30)
.required(),
birth_year: Joi
.number()
.min(2000)
.warn() // warning
.required()
});
现在您可以在async
function 中使用validateAsync()
方法验证它,如下所示:
(async function(){
try {
const { value, warning } = await schema.validateAsync({ username: 'abc', birth_year: 1994 }, { warnings: true });
} catch(e) {
console.log(e);
}
})();
如果 birth_year 字段不存在,此代码将抛出错误;如果 birth_year 字段存在但不符合要求,则此代码将抛出警告。
请注意warn()
将终止当前规则集并且不能跟在另一个规则选项之后。 使用rule()
应用多个规则选项。
这是一种方法,如果您坚持发出警告而不是错误: https://stackblitz.com/edit/node-nuys5f?file=index.js
本质上,您将创建另一个变量来验证您想要在不存在时发出警告的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.