繁体   English   中英

如何对不存在的属性发出 Joi 警告

[英]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://joi.dev/api/?v=17.7.0#anywarn

这是一种方法,如果您坚持发出警告而不是错误: https://stackblitz.com/edit/node-nuys5f?file=index.js

本质上,您将创建另一个变量来验证您想要在不存在时发出警告的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM