ソーシャルプロファイルのフィールドがいくつかあるオブジェクトに対してJoiスキーマを定義しています。目的は、すべてのフィールドが存在し、少なくとも1つが空ではない文字列であることを保証することですが、他のフィールドはnull
にすることができます。ここでnullを許可するjoiオブジェクトにNULL以外の子を少なくとも1つ必要とする
は、私がこれまで持っているものです。
const socialUrl = joi.string().min(1).alphanum().allow(null);
const schema = joi.object({
facebook : socialUrl.required(),
twitter : socialUrl.required(),
youtube : socialUrl.required()
}).required()
これは、次のオブジェクトが有効であると考えられることを除いて素晴らしい作品:
{
facebook : null,
twitter : null,
youtube : null
}
オブジェクトにmin()とor()を使用するためには役立ちません。フィールドが存在する、彼らは間違ったタイプです。
後で自分自身で余分なループを行い、すべてのフィールドの具体的なケースがnull
であることを確認するのはかなり簡単ですが、それは理想的ではありません。
これはpayload validationで使用されています。クライアントが完全なスキーマを理解していることがわかり、したがってすべてのフィールドが存在することが望ましいということがわかります。多分それはそれに値するものではありません。私は仕事を終わらせるためにいくつか冗長なコードwhen()を使うことができるという感覚を得るが、それは私自身のループを作っているように思えるかもしれない。間違ったことが証明されることを願っています!ここ
こんにちは、助けてくれてありがとう。残念ながら、これはすべてのフィールドが存在することを検証しません。だから、 '{facebook: 'foo'}'のようなオブジェクトは、 '{facebook: 'foo'、twitter:null、youtube:null}'の入力を要求したいところです。 –
@SethHolladay 少なくとも3つの有効で無効な例を教えてください。 – IlnurIbat
私はテストを使ってレポを作った@IlnurIbat https://github.com/sholladay/repro-so-45123536を参照 –