【问题标题】:Joi validation schema - two fields must not have the same valueJoi 验证模式 - 两个字段不能具有相同的值
【发布时间】:2016-02-16 15:08:42
【问题描述】:

假设我有以下架构:

var schema = {
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().required()
};

是否可以设置一个验证规则来检查两个字段是否具有不同的值?

【问题讨论】:

    标签: javascript node.js validation joi


    【解决方案1】:

    是的。您可以通过使用Joi.refJoi.invalid(别名为Joi.disallow)来做到这一点。对于您的特定示例,它将是:

    var assert = require('assert');
    var Joi = require('joi');
    
    var schema = Joi.object().keys({
      fieldOne: Joi.string().required(),
      fieldTwo: Joi.string().disallow(Joi.ref('fieldOne')).required()
    });
    

    测试它会产生我们期望的结果:

    assert.ok(Joi.validate(4, schema).error !== null);
    assert.ok(Joi.validate({ fieldOne: 'a', fieldTwo: 'a' }, schema).error !== null);
    assert.ok(Joi.validate({ fieldOne: 'a', fieldTwo: 'b' }, schema).error === null);
    

    它通过在 fieldTwo 的定义中引用 fieldOne 并禁止相同的值来工作。

    【讨论】:

    • 谢谢福特。赏金将在 5 小时内发放。
    • 能否请您告诉我如何使用数组做到这一点?
    • 嗯,以前从未用数组做过。我的第一个想法是Joi.array().items(Joi.string().disallow(Joi.ref('fieldOne')).required()),虽然似乎不起作用,但可能是一个很好的起点。如果有的话,它可能指向您可以在 project page 上提出的错误。
    • 谢谢你!虽然已经有一段时间了,只是想知道您是否知道这样做的方法,以便错误消息表明违反唯一性约束。使用您在此处发布的方法,错误消息类似于“fieldTwo 包含无效值”,在这种情况下并非 100% 准确。
    猜你喜欢
    • 2020-02-20
    • 2016-09-14
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多