Node.jsのclass-validatorでユニークバリデーション

  • 19 May 2019
Post image

 nodejsのclass-validatorについて。

https://github.com/typestack/class-validator


class-validatorインストール

 modelクラスのプロパティにアノテーションでバリデーションルールを記載し、1つのメソッドでバリデーションチェックしてくれるライブラリだ。

 ほとんど使い方は公式にある通りでする理解できるが、ユニークチェックに少しハマったのでメモ。


class-validatorでユニークバリデーションチェック

 Hogeクラスはhogeテーブルのモデルで、emailカラムの重複チェックをしたい時は以下のようにする。

import {
    validate,
    registerDecorator,
    ValidationOptions,
    ValidatorConstraint,
    ValidatorConstraintInterface,
    ValidationArguments
} from "class-validator";

export class Hoge {

	@Unique({
        message: "このメールアドレスは既に使用されています。"
    })
    public email: string | null = null;
}

@ValidatorConstraint({async: true})
export class UniqueConstraint implements ValidatorConstraintInterface {
    async validate(value: any, args: ValidationArguments) {
    	// DBに接続してvalueの一致レコードを取得
    	// 一致レコードが存在する場合はfalse(バリデーションエラー)
        return true
    }
}

export function Unique(validationOptions?: ValidationOptions) {
    return function (object: Object, propertyName: string) {
        registerDecorator({
            target: object.constructor,
            propertyName: propertyName,
            options: validationOptions,
            constraints: [],
            validator: UniqueConstraint
        });
    };
}

 後は普通にvalidateメソッド呼び出しでバリデーションできる。

const hoge = new Hoge()
hoge.email = '[email protected]' //既に登録されているemail
validate(hoge).then(errors => {
    // このメールアドレスは既に使用されています。
});

(別ブログからの移行記事)

You May Also Like

AxiosでCookieを送信してSessionを共有する

AxiosでCookieを送信してSessionを共有する

ブラウザからAxiosでCookieセット  ブラウザのSessionCookieなどをaxiosでそのままサーバーに送信したい時は以下のようにセットする。 axios.get('url', { withCredentials: true } )  そしてサーバー側は次のように許可す …

WindowsでもMacのUS配列キーボードが最強なわけ

WindowsでもMacのUS配列キーボードが最強なわけ

 コードを書く人間なら、キーボードにこだわりたくなるものだ。ノートPCをメインにしている場合はキーボードを変えることは難しいが、それでもJIS配列かUS配列など一度は考えたことがあるはずだ。 このサイトで何度も書いている通り、プログラミングのほとんどは試行錯誤の繰り返しで作り上げてい …