Node.jsのフレームワークExpress.jsを使いMysqlの接続

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