expressでexpress-validator
モジュールを使ってパスワードとパスワード(確認)の検証しようとしていますが、下記コードが効かず、model.save
以下に移ってログインしてしまいます。(コードはドキュメントを参考して書いています)
body('passwordConfirmation').custom((value, req) => { if (value !== req.body.password) { throw new Error('パスワード確認がパスワードと一致しません'); } return true; }), model.save(function(err){ if (err) { res.status(403).send('error:'+err); } else { res.render('home', {title: 'Laravel', user: req.body.name}); } });
body('passwordConfirmation')
をconsole.logで出力しましたが、html側のformタグname属性の入力値が入っているようではないようです。(よく分かっていないのでformのname名とmodel側のkey名をpasswordConfirmation
に統一しています)
他にbody('password')
を出力しても同じような内容で、このbodyは何を表しているのか分かりません。
しかしbody('password').isLength({ min: 7 })
はしっかり効いてくれてます。
なのに上記のコードが効かないのはなぜなのか?
どうやってデバッグ&検証すればよいのか教えて下さい。
宜しくおねがいします。
【修正後】
上記のコードの全文(controller.js)とview/login.ejs
を追加します。
const mongoose = require('mongoose'); const { body, validationResult } = require('express-validator'); const schema = require('../models/model'); const Model = mongoose.model('Model', schema); exports.login = function(req, res){ res.render('login', {title: 'Laravel'}); }; exports.loginPost = function(req, res){ const errors = validationResult(req); const model = new Model(); console.log(body); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); }; body('passwordConfirmation').custom((value, req) => { //console.log(req.body.password); console.log(body.passwordConfirmation); if (value !== req.body.password) { throw new Error('パスワード確認がパスワードと一致しません'); } return true; }), model.save(function(err){ if (err) { res.status(403).send('error:'+err); } else { res.render('home', {title: 'Laravel', user: req.body.name}); } }); }
login.ejs
1<%- include('partials/header') %> 2<div id="big-container"> 3 <div id="login-first-container"><%= title %></div> 4 <div id="login-second-container"> 5 <form action="#" method="post"> 6 <p>name<input type="text" name="name"></p> 7 <p>Password<input type="text" name="password"></p> 8 <p>Password(確認)<input type="text" name="passwordConfirmation"></p> 9 <button name="login">Login</button> 10 <a href="#">Forget Your Password?</a> 11 </form> 12 13 </div> 14</div> 15<%-include('partials/footer') %>
回答1件
あなたの回答
tips
プレビュー