Node.jsのフレームワークExpressを使い、Mysqlと接続、クエリ文によるデータベースの操作を行います。
目次
1.本稿の実行環境
(1)ホストOS
Windows 10 Pro
(2)仮想環境(VirtualBox)
・ゲストOS:CentOs8(Red Hat 64-bit)
・nodejs、及びnpmはインストール済
# node -v
v10.24.0
# npm –version
6.14.11
2.Expressを使ったMysqlの接続
(1)Express.jsのインストール
・ディレクトリを任意の名前で作成
ここでは、”crud-app”とした。
・パッケージ情報の作成
作成したディレクトリに移動して、パッケージ情報を作成する。
# cd crud-app
# npm init -y
package.jsonファイルが作成される
・express.jsのインストール
# npm install express
(2)MySQL接続ドライバのインストール
express.jsからMySQLへ接続するためのドライバをインストールする。
# npm install mysql
(3)データベースの作成
予め、データベースを作成しておく。
Mysqlに接続して、CREATE DATABASEコマンドでデータベース(crud_db)を作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# mysql -u root -p Enter password: mysql> CREATE DATABASE crud_db; Query OK, 1 row affected (0.25 sec) mysql> SHOW databases; +--------------------+ | Database | +--------------------+ | crud_db | | +--------------------+ |
3.テーブルの作成
connectionクラスのqueryメソッドを使って、テーブル作成のクエリを出力する。
app1.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
const express = require('express') const app = express() const port = 3000 const mysql = require('mysql'); //データベースの接続情報 const con = mysql.createConnection({ host: 'localhost', user: 'root', password: ' ', database: 'crud_db' }); //データベースの接続とテーブル作成 con.connect(function(err) { if (err) throw err; console.log('Connected'); const sql = 'CREATE TABLE users (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL)'; con.query(sql, function (err, result) { if (err) throw err; console.log('table created'); }); }); |
・サーバの起動
[root@localhost crud-app]# node app1.js
Connected
table created
・テーブルが作成されたことを確認する
1 2 3 4 5 6 |
# mysql -u root -p Enter password: mysql> use crud_db; Database changed mysql> SHOW tables; mysql> SHOW COLUMNS FROM users; |
4.テーブルデータの取得
(1)テーブルデータの作成
予め、テーブルデータを作成しておく。
sql文
INSERT INTO crud_db(フィールド,・・・) VALUES(値,・・・);
1 2 3 4 5 6 7 8 9 10 11 |
# mysql -u root -p Enter password: mysql> USE crud_db; mysql> INSERT INTO users(name,email) VALUES('test','test@t.com'); mysql> SELECT * FROM users; +----+------+------------+ | id | name | email | +----+------+------------+ | 1 | test | test@t.com | +----+------+------------+ 1 row in set (0.00 sec) |
(2)テーブルデータの取得
テーブルデータを取得し、ブラウザで表示する。
app2.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
const express = require('express') const app = express() const port = 3000 const mysql = require('mysql'); const con = mysql.createConnection({ host: 'localhost', user: 'root', password: ' ', database: 'crud_db' }); con.connect(function(err) { if (err) throw err; console.log('Connected'); }); app.get('/', (request, response) => { const sql = "select * from users" con.query(sql, function (err, result, fields) { if (err) throw err; response.send(result) }); }); app.listen(port); |
アロー関数を使わない書き方
app3.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
const express = require('express') const app = express() const port = 3000 const mysql = require('mysql'); const con = mysql.createConnection({ host: 'localhost', user: 'root', password: ' ', database: 'crud_db' }); con.connect(function(err) { if (err) throw err; console.log('Connected'); }); function doRequest (request, response){ const sql = "select * from users" con.query(sql, function (err, result, fields) { if (err) throw err; response.send(result) }); } app.get('/', doRequest) app.listen(port); |
(解説)
・connectionクラスのqueryメソッドを使ってクエリを出力する。queryメソッドでは第一引数にクエリを文字列で指定、第二引数にはコールバック関数を指定する。コールバック関数ではerror, results, fieldsの引数を用いることができ、errorにはクエリ実行時のエラー、resultsにはクエリ実行後の結果、fileldsにはクエリの結果のフィールドの情報が入る。
・サーバの起動
アロー関数を使ったプログラム
[root@localhost crud-app]# node app2.js
Connected
アロー関数を使わないプログラム
[root@localhost crud-app]# node app3.js
Connected
The end