NodeJsとMySQLを連携してみた件

NodeJsとMySQLを連携してみた件

NodeJsのExpressを使ってMySQLのデータを扱えるようにしてみたいと思います。
今回はExpress及びMySQLはインストールが完了している前提となります。
インストールの方法が知りたい方は以下のリンクを参考にしてください。
NodeJsのExpressを使ってみた件
MySQLをインストールしてみた件

データベースを作成しよう

最初にデータベースを作成します。
データベースの情報は以下のようなデータベースを作成します。
データベース名: appData
テーブル名: users
カラム: id, name
データベース作成の手順は
1. 起動
2. ログイン
3. データベースの作成
4. データベースの選択
5. テーブルの作成
の順です。コマンドは以下を参照ください。

// MySQLの起動
brew services start mysql@5.7;
// ログイン
mysql --user=root --password;
// データベースの作成
CREATE DATABASE appData;
// データベースの選択
USE appData;
// テーブルの作成
CREATE TABLE users (id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8;

データベースを作成したらデータを挿入しておきましょう。

INSERT INTO users(name) VALUES ('user01');
INSERT INTO users(name) VALUES ('user02');
INSERT INTO users(name) VALUES ('user03');

ユーザー3人分のデータを追加しました。
次はExpressの設定です。

ExpressからMySQLにアクセスしてみよう

Expressのapp.js(起動を制御しているjsファイル)ファイルからMySQLにアクセスしてみたいと思います。以下のコードを参考にapp.jsを書き換えてみてください。

const express = require('express');
const mysql = require('mysql');
const app = express(); 
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '[設定したパスワード]',
    database: 'appData'
});
// MySQLアクセス時のエラー処理
connection.connect((err) => {
    if (err) {
        console.log('error connecting: ' + err.stack);
        return;
    }
    console.log('success');
});

次にデータベースの情報を取得しコンソールで表示されるようにしたいと思います。以下のコードを参考にapp.jsへ記述してみてください。
※index.ejsファイルが作成されている前提になっています。

app.get('/', (req, res) => {
    connection.query(
        'SELECT * FROM users',
        (error, results) => {
            console.log(results);
            res.render('index.ejs');
        }
    );
});
app.listen(3000);

コンソールに以下のテキストが出れば成功です。

[ RowDataPacket { id: 1, name: 'user01' },
RowDataPacket { id: 2, name: 'user02' },
RowDataPacket { id: 3, name: 'user03' } ]

次にejsにデータベースの数値を反映させましょう。
index.ejsに以下のコードを追加させ表示させます。
※タグはお好みのタグをお使いください。

<ul>
<% users.forEach((user) => {%>
<li>
<%= user.name %>
</li>
<% }) %>
</ul>

ブラウザに表示されれば完成です。
以上が簡単なデータベースとの連携になります。
まだまだ初歩的な連携のみですが、Javascriptで(別途HTML、CSS、SQLの知識は必要ですが)フロントとバックエンドの対応ができました。