node.js超入門で修正が必要な箇所があったので頑張ってみた
node.jsの勉強のために掌田津耶乃氏の「node.js超入門」を勉強していていくつか表記の通りにできないところがありました。
頑張って調べて解決したので同じところで困ってる方のために書いておきます。
Express Validator
chapter6-1バリデーションのところでexpress-varidatorを読み込んで使うようになっていますが本に書かれている内容が古いようで同じように入力するとエラーになります。
本に書かれている
var validator = require('express-validator'); app.use(validator());
ではなく
const {check, validationResult} = require('express-validator');
となります。
また記入するファイルがapp.jsではなく実際に使うuser.jsに書いてください。
またvalidatorを使う部分もかなり違ってきます。私はこのように修正しました。
router.post('/add', validateParam(), (req, res, next) => { var result = validationResult(req); if(!result.isEmpty()){ var re = '<ul class="error">'; var result_arr = result.array(); for(var n in result_arr){ re += '<li>' + result_arr[n].msg + '</li>'; } re += '</ul>'; var data = { title: 'Hello/Add', content: re, form: req.body }; res.render('hello/add', data); return; }else{ var nm = req.body.name; var ml = req.body.mail; var ag = req.body.age; var data = { 'name': nm, 'mail': ml, 'age': ag }; } new MyData(data).save().then((model) => { res.redirect('/hello'); }); }); function validateParam(){ return [ check('name').notEmpty().withMessage("NAMEは必ず入力してください"), check('mail').isEmail().withMessage("MAILはメールアドレスを入力してください"), check('age').isInt().withMessage("AGEは整数を入力してください"), ]; }
詳しい説明に関しては参考にさせていただいたQiitaのこちらの記事をお読みください。
https://qiita.com/ponko2bunbun/items/a703346bedda1ee1a4eb
bookshelf
chapt6-2のbookshelfを使う際にも少し修正が必要なところがあります。
var knex = require('knex')({ dialect: 'mysql', ...
となっているところを
var knex = require('knex')({ client: 'mysql', ...
に変更してください。名前が変わっているようです。
またpaginationはbookshelf本体に組み込まれているようなので
Bookshelf.plugin('pagination');
の部分は不要なようです。
fetchのエラー
chapter7でログイン時に入力エラーをするとレスポンスがなく固まってしまうバグがあります。
これについてはかなり調べるのに苦労したんですがエラーの際にmodelにはnullどころか存在すらしていないようです。
どうやらfetch()で見つからなかった時にはオプションで設定が必要なようで
fetch({require: false})
falseを設定しておくと見つからなかった場合にnullが返ってくるそうです。
https://bookshelfjs.org/api.html#Model-instance-fetch
これで全部だったと思います。
私は全部のプログラムを入力して動かすことができたので皆さんも頑張ってください(‘ω’)ノ