解決したい問題
パッケージvalidationのバージョンが古いので新しいバージョンの書き方に変更したい。
環境
OS: macOS
express: ^4.17.1
ejs: ^2.6.2
express-validator: ^6.4.0
変更前のコード(古いコード)
router.post('/',(req,res,next)=>{varrequest=req;varresponse=res;req.check('name','NAMEは必ず入力して下さい。').notEmpty();req.check('password','PASSWORDは必ず入力して下さい。').notEmpty();req.getValidationResult().then((result)=>{if(!result.isEmpty()){varcontent='<ul class="error">';varresult_arr=result.array();for(varninresult_arr){content+='<li>'+reault_arr[n].msg+'</li>'}content+='</ul>';vardata={title:'Login',content:content,form:req.body}response.render('login',data);}else{varnm=req.body.name;varpw=req.body.password;User.query({where:{name:nm},andWhre:{password:pw}}).fetch().then((model)=>{if(model==null){vardata={title:'再入力',content:'<p class="error">名前またはパスワードが違います</p>',form:req.body};respose.render('login',data);}else{request.session.login=model.attributes;vardata={title:'Login',content:'<p>ログインしました!<br>トップページに戻ってメッセージを送信下さい。</p>',form:req.body}respose.render('login',data);}});}})});
このreq.checkがエラーになる。
変更後
上に↓のコードを書き足す。
const{check,validationResult}=require('express-validator');
router.post('/',[check('name','NAMEは必ず入力して下さい。').notEmpty(),check('password','PASSWORDは必ず入力して下さい。').notEmpty()],(req,res,next)=>{varrequest=req;varresponse=res;consterrors=validationResult(req);if(!errors.isEmpty()){varcontent='<ul class="error">';varresult_arr=errors.array();for(varninresult_arr){content+='<li>'+result_arr[n].msg+'</li>'}content+='</ul>';vardata={title:'Login',content:content,form:req.body}response.render('login',data);}else{varnm=req.body.name;varpw=req.body.password;User.query({where:{name:nm},andWhere:{password:pw}}).fetch().then((model)=>{if(model==null){vardata={title:'再入力',content:'<p class="error">名前またはパスワードが違います</p>',form:req.body};response.render('login',data);}else{request.session.login=model.attributes;vardata={title:'Login',content:'<p>ログインしました!<br>トップページに戻ってメッセージを送信下さい。</p>',form:req.body}response.render('login',data);}}).catch((error)=>{vardata={title:'再入力',content:'<p class="error">名前またはパスワードが違います。</p>',form:req.body};res.render('login',data);console.log(error);});}});
大きく変わったのはcheckの位置です。
参考
↓この本の学習中に、バージョンが古くてエラーになった。
https://www.amazon.co.jp/Node-js%E8%B6%85%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798055220
↓最新バージョンの参考
https://express-validator.github.io/docs/