1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[node.js]Expressでvalidatorjsを使ってバリデーションをかける

Last updated at Posted at 2019-06-25

はじめまして、PMをやっているtatsukenと申します。はじめまして
研修の一環でvue.js、expressを書くことがあったので、そのことを中心にまとめていきたいと思います。

はじめに

Expressでmysql2sequelizeなどを使ってデータベースを操作する事が多いと思うのですが、データベースを操作する前にはExpressで受け取ったパラメーターはバリデーションをかける必要があります。
フロントでのバリデーションはユーザー体験を向上させるためのもので、これだけではセキュリティが担保できているとは言えません。そのためサーバーサイドにもバリデーションを掛ける必要があります。
Expressのバリデーションといえばexpress-validatorなどが有名ですが今回はvalidatorjsというライブラリを使ってバリデーションをかけていきたいと思います。

実装

インストール

npm install validatorjs -s

バリデーション。

バリデーションをかけたいファイルに以下のように記述してみてください

validation.js
const express = require('express');
const router = express.Router();
const validator = require('validatorjs');
router.post('/image', (req, res) => {
  const data = req.body
  const name = data.name // => 中身は'johndoe'
  const height = data.height // => 中身は 175
  const email = data.email //=> 中身は'johndoe@gmail.com',
  const people = {
    name: name, // => 中身は'johndoe'
    height: height, // => 中身は 175
    email: email //=> 中身は'johndoe@gmail.com',
  }
  let rules = {
    name: 'required|string',//nullはNGかつsting型
    heigh: 'required | integer | max: 1000',//nullはNGかつinteger型かつmaxの値は1000
    email: 'required|email',//nullはNGかつemailの条件にmatchする
  };
  let validation = new validator(people, rules);//ここでバリデーションを判定している
  if (validation.fails()) {
    res.json({
      status: "error",
      error: validation.errors.all()//ここで詳しいエラー情報が入っている
    })
    return
  }
})

説明

  • バリデーションをかける対象(今回ならconst people)とバリデーションのrule(今回ならconst rules)をそれぞれobjectで作り、new validator(people, rules)で比較していく
  • バリデーションルールに関してはrequired | integer | max: 1000 というように自分のかけたいバリデーションルールを列挙することでルールを増やすことができる。
  • ルールのすべてを見たい方はこちらをご参照ください。
  • もしバリデーションが通ればvalidation.fails()falseとなり、バリデーションが通らなければvalidation.fails()`はtrueとなる
  • もしエラーの場合はvalidation.errors.all()にすべてのエラー情報が入っている。

補足

どの部分がエラーになっているかという情報は必要ない!ただバリデーションが通るかどうか知りたいという方はもっと簡単に実装出来ます。

validation.js
let data = {
  name: 'John',
  email: 'johndoe@gmail.com',
  age: 28
};
 
let rules = {
  name: 'required',
  email: 'required|email',
  age: 'min:18'
};
 
let validation = new Validator(data, rules);
 
validation.passes(); // true
validation.fails(); //false

最後に

このようにvalidatorjsを使えば直感的にバリデーションをかけることが出来ます。
node.jsでバリデーションをかける際はぜひ一度使ってみてください。
なにか間違いなどありましたら、指摘いただけると幸いです。

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?