ExpressからMySQLへ接続してみる

2021/02/23

アプリケーションを作成するのにデータベースが必要になる場面が出てくることがあるでしょう。
今日はExpressからMySQLへのアクセスを試してみます。

前提

Node.js および Express.jsがインストール済み

MySQL側の準備

  • MySQLのインストール
  • ターミナルからMySQLへ接続する
  • データベースを作成する
  • テーブルを作成する
  • レコードを追加する

MySQLのインストール

まずはMySQLがインストールされていないことには始まらないので,MySQLをインストールしていきます。

brew install mysql

Homebrewを用いてMySQLをインストールしていきます。
環境によるかもしれませんが,それなりにインストールに時間がかかります。

mysql --version
# mysql  Ver 8.0.23 for osx10.15 on x86_64 (Homebrew)

インストールされたバージョンを確認します。
Ver 8.0.23がインストールされました。

ターミナルからMySQLへ接続する

ターミナルからMySQLへログインしてみます。
Homebrewでインストールするとrootユーザーのパスワード設定がされないため,パスワード不要です。

mysql -u root

これでMySQLへログインすることができます。
実際に使う場合はmysql_secure_installationでパスワードの設定をしましょう。

データベースを作成する

Expressで使用するデータベースを作ります。

mysql> create database express-app;
-- Query OK, 1 row affected (0.06 sec)

mysql> show databases;
-- +--------------------+
-- | Database           |
-- +--------------------+
-- | express_app        |
-- | information_schema |
-- | mysql              |
-- | performance_schema |
-- | sys                |
-- +--------------------+
-- 5 rows in set (0.00 sec)

テーブルを作成する

usersテーブルを作成します。
ID,名前,メールアドレスのカラムを持ったテーブルを作成していきます。

mysql> use express_app
-- Database changed
mysql> CREATE TABLE IF NOT EXISTS users (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL);
-- Query OK, 0 rows affected (0.03 sec)

レコードを追加する

mysql> INSERT INTO users (name, email) VALUES('kohe', 'kohe@example.com');
-- Query OK, 1 row affected (0.03 sec)
mysql> select * from users;
-- +----+------+------------------+
-- | id | name | email            |
-- +----+------+------------------+
-- |  1 | kohe | kohe@example.com |
-- +----+------+------------------+
-- 1 row in set (0.00 sec)

Express側の準備

  • MySQL接続ドライバーをインストール
  • ExpressからMySQLへ接続

MySQL接続ドライバーをインストール

Expressのプロジェクトがあるディレクトリへ移動して

npm install mysql2

mysqlというパッケージもありますが,MySQL 8系だと起動時に,
‘ERNOTSUPPORTEDAUTHMODE’
‘Client does not support authentication protocol requested by server; consider upgrading MySQL client’
というエラーが出るのでmysql2の方をインストールすることをおすすめします。
互換性もあり今後追加機能も提供していくようです。

ExpressからMySQLへ接続

// app.js
var mysql = require('mysql2');

// MySQL接続
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'express_app'
});
connection.connect(function (err) {
  if (err) throw err;
  console.log('connected');
  // レコードの取得
  const sql = "select * from users";
  connection.query(sql, function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
});

起動してみます。

npm start

# > express-app@0.0.0 start /Users/xxx/my-prototype-node/express-app
# > node ./bin/www

# connected
# [ TextRow { id: 1, name: 'kohe', email: 'kohe@example.com' } ]

レコードの取得ができました。

ひとこと

データベースにアクセスができるようになるとアプリケーションの幅が広がりますね。
基本SQLでデータベース操作ができるみたいなので,SQL文を思い出さねばです。。。
お仕事でも,趣味でもORMにたよりっきりなのでw

それではまた明日。


書いた人: こへ
音楽と漫画と読書とアニメとスノボが好き。多趣味でいろんなことに興味有ります。 誰しもが一度は使った事があるもののIoT開発をしてます。
Twitterフォローお願いします。