2013-08-18

[Node.js] Express でのインプットバリデーションについて

最近のお勧めは express-joi です。

express-validator の都合の悪いところ:全入力値が文字列であることが前提になっているので、undefined と空文字列を区別して扱うことができない。具体的には、明示的な空文字列の指定と、指定し忘れを区別して処理したい場合など。

express-joi という別の Express 用バリデーションライブラリは、上記の欠点は無く問題なく使えます。具体的には emptyOk() と required() を駆使すれば良いです。ライブラリのバージョンは低いけれど単なるラッパーのようなので気にしなくて良いと思う。joi は事前に用意したスキーマに適合するかによって入力値が valid かどうかを検証する仕組み。スキーマ定義がおかしいときその時点でエラーになるので、実際のバリデーションが行われるより早い段階でエラーとなるところも気に入っています。

2013/10/2 追記
現在のバージョン 0.2.4 に入っている URL エンコードのデコード処理は Express で既にデコード済みのものを二重にデコードしようとしているせいで、"% " などの入力文字列でエラーになるようです。joiを直接使うのもそんなに難しくないと思ったので直接使っています。