2

スキーマを作成しましたが、期待どおりに検証されていないようです。スキーマ構文に何か問題があると思いますが、それを理解できません。募金活動が完了した場合にのみ必要になるため、募金活動が完了するまで、タイトルまたはターゲットのエラー メッセージが表示されないことを期待しています。多くの組み合わせを試しましたが、期待どおりに機能するものはありません。これらの 2 つは、必要なものに最も近いものです。

スキーマ試行 1 : 4 つのエラー メッセージ、3 つの必須エラー、およびデータが "then" スキーマと一致する必要があることを示す 1 つのエラーが表示されます。

const schema = {
  required: ['fundraiser'],
  if: {
    properties: {
      fundraiser: { type: 'string' },
    },
  },
  then: {
    required: ['title', 'target'],
  },
  errorMessage: {
    required: {
      fundraiser: 'Please select an option',
      title: 'Please enter a title',
      target: 'Please enter a target',
    },
  },
};

スキーマ試行 2 : 2 つのエラー メッセージが表示されます。1 つの必須エラーと 1 つのエラーは、データが "then" スキーマと一致する必要があることを示していますが、これは正しいですが、募金活動が完了すると有効になり、タイトルとターゲットの必須エラーが表示されると予想されます。また、エラーには定義済みのカスタム エラー メッセージはありません。

const scema = {
  if: {
    properties: { fundraiser: { minLength: 2 } },
    then: { required: ['title', 'target'] },
  },
  then: { required: ['fundraiser'] },
  errorMessage: {
    required: {
      fundraiser: 'Please select an option',
      title: 'Please enter a title',
      target: 'Please enter a target',
    },
  },
};

スキーマに問題があることは確かですが、ドキュメントからは、if/then を ajv-errors を使用したカスタム エラー メッセージと組み合わせて使用​​する方法が明確ではありません。どんな助けでも大歓迎です!ありがとう!

4

1 に答える 1

1

最初のスキーマの問題は、「if」内のサブスキーマが有効であることです。type: 'object'ルートスキーマに追加してrequired「if」サブスキーマ内に移動すると、おそらく期待どおりに機能します。

2 番目のサブスキーマの問題は、同じスキーマ オブジェクトに "if" がない最初の "then" が無視されることです (ただし、if/then/else を実装する ajv-keywords を使用して、ドラフトで定義されている方法とは多少異なる場合を除きます)。 -07 of JSON Schema spec) および「if は募金活動プロパティが存在しない場合でも有効であり、2 番目の「then」は募金活動が存在する場合にのみ通過できます。

于 2017-12-05T20:14:13.780 に答える