【Node.js express】express-validatorでバリデーションを実装し、通過した値をセッションに格納する。
以下の項目を満たすバリデーションをexpress-validatorで実装してみる。
テンプレートエンジンはejs。フレームワークはexpress
- パスワードが7文字以上
- パスワードが確認用と一致している
- 全ての項目が入力されている
- 問題なかったら、ホーム画面へ
1) express-validatorをインストールする。
Dockerfileに、ビルド時にexpress-validatorをインストールするように記載。
参考
https://qiita.com/sho_U/items/0ef3dfc7b07b5e13fa18
#express-validatorを追記
RUN npm install ejs\
express-validator
2) express-validatorをrequireする。(分割代入)
const { check, validationResult } = require('express-validator');
const check = バリデーションチェックを行うための関数
const validationResult = 実行結果に関する情報などを管理するResultFactoryというオブジェクトを生成する関数
が格納される。
3)ルーティングの第2引数に条件を追加
[
// checkメソッドを使用してバリデーションを実行
// withMessageメソッドで弾かれた場合のmsgを設定
check('name').not().isEmpty().withMessage('nameEmpty'),
check('email').not().isEmpty().withMessage('emailEmpty'),
check('password').not().isEmpty().withMessage('passwordEmpty'),
check('password').isLength({ min: 7 }).withMessage('passwordUnder7'),
//バリデーションをカスタムで作成
check('password').
custom((value, { req }) => {
//一致した場合trueを返す
if (req.body.password === req.body.confirmPassword) {
return true;
}
}).withMessage('passwordNoMach')
],
4)ルーティングの第3引数にバリデーションエラー時の処理(クロージャー)を追加
function (req, res, next) {
//結果をerrorsに格納
const errors = validationResult(req);
//引っ掛かった場合
if (!errors.isEmpty()) {
console.log(errors)
}
console.logでerrorsの中身を確認
Result {
formatter: [Function: formatter],
errors: [
{
value: '',
msg: 'nameEmpty',
param: 'name',
location: 'body'
},
{
value: '',
msg: 'emailEmpty',
param: 'email',
location: 'body'
},
{
value: '1',
msg: 'passwordUnder7',
param: 'password',
location: 'body'
},
{
value: '1',
msg: 'passwordNoMach',
param: 'password',
location: 'body'
}
]
}
errors:errors:{}で格納されている。
第3引数の処理全体
function (req, res, next) {
const errors = validationResult(req);
//エラーオブジェクトをerrorsに格納。
if (!errors.isEmpty()) {
let messages = [];
errors.errors.forEach((error) => {
messages.push(error.msg);
//配列に格納
});
res.render('users/signup', { messages: messages })
} else {
req.session.name = req.body.name;
//セッションに格納
res.redirect("/home");
}
});
express-sessionモジュールを利用する。
//インストール
npm install express-session
//追記
const session = require("express-session");
//appオブジェクトにsession設定を組み込む。
// app = express()とルーティング設定の範囲に記載
app.use(session({
secret: "secretWord",
resave: false,
saveUninitialized: true,
cookie: { maxAge: 10 * 1000 }
}));
session({ オプション })でexpress-sessionの設定をする。
secret:
クッキーに保存するセッションIDを署名するために使用される秘密ワード。
resave
セッションをセッションストアに強制的に保存するかどうかの設定。
saveUninitialized
初期化されていないセッションを強制的に保存するかどうかの設定。
cookie
セッションIDのクッキーの設定を指定できます。 maxAge:保存期間。
Author And Source
この問題について(【Node.js express】express-validatorでバリデーションを実装し、通過した値をセッションに格納する。), 我々は、より多くの情報をここで見つけました https://qiita.com/sho_U/items/f31763fd6fea1e0d6999著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .