##解決したい問題
パッケージvalidationのバージョンが古いので新しいバージョンの書き方に変更したい。
##環境
OS: macOS
express: ^4.17.1
ejs: ^2.6.2
express-validator: ^6.4.0
##変更前のコード(古いコード)
router.post('/', (req, res, next) => {
var request = req;
var response = res;
req.check('name', 'NAMEは必ず入力して下さい。').notEmpty();
req.check('password', 'PASSWORDは必ず入力して下さい。').notEmpty();
req.getValidationResult().then((result) => {
if (!result.isEmpty()) {
var content = '<ul class="error">';
var result_arr = result.array();
for(var n in result_arr) {
content += '<li>' + reault_arr[n].msg + '</li>'
}
content += '</ul>';
var data = {
title: 'Login',
content: content,
form: req.body
}
response.render('login', data);
} else {
var nm = req.body.name;
var pw = req.body.password;
User.query({where: {name: nm}, andWhre: {password: pw}})
.fetch()
.then((model) => {
if (model == null) {
var data = {
title: '再入力',
content: '<p class="error">名前またはパスワードが違います</p>',
form: req.body
};
respose.render('login', data);
} else {
request.session.login = model.attributes;
var data = {
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) => {
var request = req;
var response = res;
const errors = validationResult(req);
if (!errors.isEmpty()) {
var content = '<ul class="error">';
var result_arr = errors.array();
for(var n in result_arr) {
content += '<li>' + result_arr[n].msg + '</li>'
}
content += '</ul>';
var data = {
title: 'Login',
content: content,
form: req.body
}
response.render('login', data);
} else {
var nm = req.body.name;
var pw = req.body.password;
User.query({where: {name: nm}, andWhere: {password: pw}})
.fetch()
.then((model) => {
if (model == null) {
var data = {
title: '再入力',
content: '<p class="error">名前またはパスワードが違います</p>',
form: req.body
};
response.render('login', data);
} else {
request.session.login = model.attributes;
var data = {
title: 'Login',
content: '<p>ログインしました!<br>トップページに戻ってメッセージを送信下さい。</p>',
form: req.body
}
response.render('login', data);
}
}).catch((error) => {
var data = {
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/