nodejs超入門

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

 

 

これで全部だったと思います。

私は全部のプログラムを入力して動かすことができたので皆さんも頑張ってください(‘ω’)ノ


Node.js超入門[第2版]

Pocket

コメントを残す

あなたのメールアドレスは公開されません。

© 2020 俺のSPACE | WordPress Theme: Annina Free by CrestaProject.