首页 > 解决方案 > 如何在 joi 模式中运行自定义验证功能

问题描述

我想根据架构中没有的内容将字段设为必填或可选。例如,存储在全局范围内的东西。这是 Joi 模式:

first_name: Joi.string().min(2).max(10).regex(Regex.alphabeta, 'alphabeta').error(JoiCustomErrors)

如果为 1,如何使其first_name成为必需some_global_scope_var,否则,使其成为可选?

注意:some_global_scope_var不是架构的一部分。

标签: javascriptvalidationschemajoi

解决方案


$使用字符访问全局范围

last_name通常,您将访问不带前缀的相对属性。对于全局访问前缀你的变量$

完整的解决方案

const Joi = require('@hapi/joi');

global.app = {
  someValue: 1,
};

const schema = Joi.object().keys({
  first_name: Joi.string()
                 .min(2)
                 .max(10)
                 .when('$app.someValue', {
                   is: Joi.equal(1),
                   then: Joi.required(),
                 })
});

const value = {
  first_name: 'a1300',
};

const result = schema.validate(value);
console.log(JSON.stringify(result.error, null, 2));

PS我省略了regex(Regex.alphabeta, 'alphabeta').error(JoiCustomErrors)


推荐阅读