Joi で JS のバリデーションを実行する

joi を使った JS バリデーションの手法を紹介していきます。

Joiを利用したバリデーション

まずは joi を利用して,ルールセットを作成します。

const Joi = require('joi');

const schema = Joi.object().keys({
    username: Joi.string().alphanum().min(3).max(30).required(),
    password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
    access_token: [Joi.string(), Joi.number()],
    birthyear: Joi.number().integer().min(1900).max(2013),
    email: Joi.string().email({ minDomainAtoms: 2 })
}).with('username', 'birthyear').without('password', 'access_token');

作成したルールを利用してバリデーションの実行が可能です。

// Return result.
const result = schema.validate({ username: 'abc', birthyear: 1994 });
// result.error === null -> valid

ルールの作成

利用可能な バリデーションルールについては、公式ドキュメントを参照ください。

joi/API.md at v13.5.2 · hapijs/joi · GitHub

バリデーション結果の取得

Joi は バリデーションの他に、トリムや型の変換と言ったフィルタの機能も有しています。

バリデーションの結果は、検証の成否の他に、フィルタ済みオブジェクトもセットで渡されます。

バリデーションの結果はシンプルなオブジェクトとして取得できます。

const result = schema.validate(value);
// result.error -> null
// result.value -> { "a" : 123 }

また、Promise 風の記法で結果を取得することも可能です。

// or
const promise = schema.validate(value);
promise.then((value) => {
    // value -> { "a" : 123 }
});

バリデーションエラーが発生した際には JS ベースのエラーオブジェクトが取得できます。

エラーオブジェクトには以下のような値が格納されています。

  • name – ‘ValidationError’.
  • isJoi – true.
  • details – エラーの詳細を保有する配列 :
  • details.*.message – エラーの詳細
  • _object – バリデーション対象の元のオブジェクト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です