アプリケーションを作成するのにデータベースが必要になる場面が出てくることがあるでしょう。
今日は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
それではまた明日。