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 } )  そしてサーバー側は次のように許可す …

NYM-Mixnetによる誰にも傍受されないプライバシー通信を試してみた

NYM-Mixnetによる誰にも傍受されないプライバシー通信を試してみた

 さて、NYMというプロジェクトをご存じだろうか?2022年4月現在、おそらくほぼすべてのインフラエンジニアやネットワークエンジニアがNYMを知らないだろう。一方で仮想通貨トレーダでこのページたどり着いたひともいるだろう。この記事ではNYMへの投資のお話は一切しないのでご注意いただきたい。エンジニア …