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)を作成する。
# 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
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
・テーブルが作成されたことを確認する
# 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(値,・・・);
# 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
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
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