【Node.js】「超入門Node.js」本でお勉強中に、うまくいかなくて悩んだり躓いた点のまとめ

当ページのリンクには広告が含まれています。

図書館で借りた「超入門Node.js」2018年発行の第二版。こちらでNode.jsのお勉強を進めていましたが、5〜6年前に出版されたものなのでどうしても内容が古くなりがちで躓いてしまうことがありました。

ある程度サポートページの正誤表に記載はされているものの、それだけでも網羅できない壁が・・・。

学習を進める中で、私がつまづいた箇所と対処法のまとめです。

あくまでも本に沿って学習を進める際の対処法なので、実践で使えるかどうかは謎。

目次

GoogleニュースのRSS取得

Chapter5で実践するGoogleニュースのRSSの取得。

本に記載の「path: ‘news?~」は使用できなくなっていて取得エラーになります。

pathを変更

JavaScript
var opt = {
  host: 'news.google.com',
  port: 443,
  path: '/rss?hl=ja&ie=UTF-8&oe=UTF-8&gl=JP&ceid=JP:ja' //この部分
};

実行したところ取得に成功しました。

MySQLのパスワード

Chapter5でMySQLの導入学習があります。

私はもともとWordPressを触るためにMAMPを入れていたので、MySQLは同じものを使用しました。

この場合、パスワードの設定が必要になります。

JavaScript
var mysql_setting = {
  host : 'localhost',
  user : 'root',
  password : '', //設定しているものを入れる
  database : 'my-nodeapp-db'
}:

Express Validatorが使えない

Chapter6でバリデーションを行うためにExpress Validatorをインストールしました。

その後、add.js で読み込ませても認識してくれない・・・

正誤表ではVer.5をインストールし、コードを書き換えて対応するよう記載されいています。

バージョンを指定したインストール

Zsh
npm install --save express-validator@5.3.1

が、getValidationResultメソッドが上手く動きませんでした。

Ver.6(現時点の最新)を使用した対処法を下記サイトで発見。

上手く動きました!(感謝)

Chapter7でもバリデーションコードの変更が必要

ミニ伝言板アプリを作ってみるところでもExpress Validatorを使用します。

最新版をインストールしたら、user.js内のコードを書き換えます。

/addのpost部分

JavaScript
router.post('/add', [
  check('name','NAME は必ず入力して下さい。').not().isEmpty(),
  check('password','PASSWORD は必ず入力して下さい。').not().isEmpty()
], (req, res, next) => {
  var result = validationResult(req);
  if (!result.isEmpty()) {
      var content ='<ul class="error">';
      var result_arr = result.array();
      for(var n in result_arr) {
          content += '<li>' + result_arr[n].msg + '</li>'
      }
      re += '</ul>';
      var data = {
          title: 'Users/Add',
          content: content,
          form: req.body
      }
      res.render('users/add', data);
  } else {
    req.session.login = null;
    new User(req.body).save().then((model) => {
      res.redirect('/');
    });
  }
});

/ のpost部分

JavaScript
router.post('/', [
  check('name','NAME は必ず入力して下さい。').not().isEmpty(),
  check('password','PASSWORD は必ず入力して下さい。').not().isEmpty()
],(req, res, next) => {
  var result = validationResult(req);
  if (!result.isEmpty()) {
    var content = '<ul class="error">';
    var result_arr = result.array();
    for(var n in result_arr) {
      content += '<li>' + result_arr[n].msg + '</li>'
    }
    content += '</ul>';
    var data = {
        title: 'Users/Login',
        content: content,
        form: req.body
    };
    res.render('users/login', data);
  } else {
// 以下省略

Bookshelfがインストールできない

Chapter6でBookshelfをインストール手順で、インストールエラーになりました。

原因は先にインストールした、knexのバージョンにありました。

ターミナル(コマンドプロンプト)からインストールすると最新版がインストールされる為、bookshelfを使用する場合のknexバージョンに縛りがあることによりインストールできませんでした。

エラーログ

knex@”>=0.15.0 <0.22.0″ from bookshelf@1.2.0

エラーログによると、

0.15.01以上0.22.0未満のknexでbookshelf 1.2.0が使えるとのこと。

knexを一旦アンインストールして、バージョンを指定したインストールをします。

knexをアンインストール

Zsh
npm uninstall knex

knexのバージョンを確認

Zsh
npm view knex versions --json

上記のコマンドを実行すると、これまでのバージョンがずらずら〜〜っと表示されます。

0.22.0未満で一番新しいものは、0.21.21 だったので、こちらをダウンロードします。

Zsh
npm install --save knex@0.21.21

その後、bookshelfをインストールすると無事成功しました。

補足

Bookshelfのcoreファイル内に既にpaginationが組み込まれていてエラーになることがあるので、その場合は以下のコードを削除します。

JavaScript
Bookshelf.plugin('pagenation');

ログインエラーページにいかない

Chapter6のusers.jsと、Chapter7のlogin.jsで、入力された名前とパスワードを比較して、異なっていたらエラーを返す処理部分。

エラーページに移動する処理でEmptyResponseエラーになってしまい上手くいきませんでした。

本のコード

JavaScript
var nm = req.body.name;
var pw = req.body.password;

User.query({where: {name: nm}, andWhere{password: pw}})
.fetch()
.then((model) => {
//以下省略

実行されたクエリの結果が空のため、fetchでエラーになってしまうという状況。

fetchメソッドに結果が空の場合の対策をします。

JavaScript
.fetch({require: false})

このオプションを設定することによりエラー処理がうまくされるようになりました。

本の最新版

第2版でお勉強しましたが、今は第4版となっています。

内容も更新されているかな?

著:掌田津耶乃
¥2,673 (2024/11/14 23:32時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次