ProgateからダウンロードできるのNode.js学習レッスンⅢのサンプルをローカル環境で動作させるまで、いろいろ引っかかってしまったので、試した手順を残しておきます。
環境
Windows10 Home
インストール
以下のものをインストールしました。
・Node.js(前回インストール済み)
・MySQL(progateのぺージを参考にインストール)
フォルダ構成を整える
progateからnodejs_study_3.zipというファイルをダウンロードしてきましたが、この中身は
・フォルダ構成が再現されていない
・画像ファイルが0byte
となっています。画像ファイルは空のファイルのままでもいいですが、
フォルダ構成は再現する必要があります。
以下のように配置します。
root/
 ├ public/
 │   ├ css/
 │   │ └ style.css
 │   └ images/
 │     └ top.png
 ├ views/
 │ ├ edit.ejs
 │ ├ hello.ejs
 │ ├ index.ejs
 │ ├ new.ejs
 │ └ top.ejs
 ├ app.js
 ├ index.js
 └ items.sqlnpmの準備
npm関連のコマンドを実行して準備します。
パスは上記のルートフォルダで行います。
npm init
npm install express --save
npm install ejs
npm install mysqlデータベースを準備する
まずはサービスが動いているか確認します。
検索などからサービスを起動し、MySQL57のサービスが実行中になっているか確認します。

データベースを作成していきます。
ダウンロードファイルにitems.sqlというファイルが入っているので、こちらを使っていきます。
mysql -u root -p
CREATE DATABASE list_app;
use list_app;
CREATE TABLE items (id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8;
source items.sql;最後のsource items.sql;ですが、そのままの文字コードではエラーがでたため、items.sqlをサクラエディタで開いてSJISで保存することで読み込めました。
サーバー起動
サーバー起動の前にデータベースに関する記述を修正していきます。
ついでにデータベースの動作確認用にエラーログを追加しています。
const express = require('express');
const mysql = require('mysql');
const app = express();
app.use(express.static('public'));
app.use(express.urlencoded({extended: false}));
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '*********', //mysqlに入力したパスワード
  database: 'list_app'
});
//エラーログ追加
connection.connect((err) => {
  if (err) {
    console.log('error connecting: ' + err.stack);
    return;
  }
  console.log('success');
});app.jsを修正来たらサーバーを起動していきます
node app.jsブラウザでhttp://localhost:3000/にアクセスして確認して問題なければ完了です。
躓いたところ
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
mysql -u root -p; 実行時に表示されたエラー。
MySQL57のサービスが実行されていませんでした。
ERROR 1406 (22001): Data too long for column ‘name’ at row 1
source items.sql; 実行時に表示されたエラー。
items.sqlがUTF-8だとエラー表示されたので、SJISにしたら実行できました。
確認には以下のコマンドで、コマンド単体だと動作することを確認して、削除して、確認しました。
INSERT INTO items(id,name) VALUES (1,'じゃがいも');
DELETE FROM items WHERE id = 1;追加できたかどうかの確認は以下のコマンドです。
SELECT * FROM items;error connecting: Error: ER_ACCESS_DENIED_ERROR: Access denied for user
node app.js起動時に出るエラー
データベースに接続できていない時に、エラーを表示させるためにapp.jsにエラーログを追加しました。
パスワードとユーザーが間違っているときに出ていたので、設定を変更しました。
Cannot read properties of undefined (reading ‘forEach’)
index(一覧)ページに移動しようとすると表示されていました。
これもデータベースに接続できていない時に、エラーを表示されていました。
forEachと書かれていますが、問題はitemsが認識できていないことでした。
            とりあえず動く○○    