Node.jsでMySQLを利用する方法

Node.jsでMySQLを利用する際の方法をいかに記載する。

#前提
以下の前提で手順を記載する。

利用するMySQLの格納先：localhost
作成ユーザ：node
パスワード:pw

#手順
##DBを作成する。
```
CREATE DATABASE yamamoto;
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/fbbeab56-e6f0-f757-e30c-57df3acc7216.png)

##DBの作成結果を確認する。
```
show databases;
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/5c0339fe-058e-d2a4-1228-1d730bc4765f.png)

##作成したDBを利用出来るようにする。
```
use yamamoto;
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/2c3a6115-c961-0a59-adea-c6d0519f5a46.png)

##テーブルを作成する。
```
CREATE TABLE pet (name VARCHAR(20), birth DATE, death DATE);
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/a1b8dd24-73c6-63f9-b72c-3e2635ffd477.png)


##テーブルの作成結果を確認する。
```
show tables;
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/b8796132-28cd-a329-076b-236e076e6d8b.png)

##テーブル定義を確認する。
```
describe pet;
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/3f66c25f-1136-6c27-03af-d08d5b14acd9.png)

##サンプルレコードを登録する。
```
insert into pet (name,birth) values ('hana',20180929);
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/1c1bfdcf-a644-960d-c9f7-a9283b057caf.png)

##登録結果を確認する。
```
select * from pet;
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/e06f8256-a68f-b334-7db1-a0793cfdf16f.png)

##ユーザを作成する。

```:ユーザ作成コマンド
create user 'node'@'localhost' identified with mysql_native_password by 'pw';
```
**ユーザを作成する際に「mysql_native_password」を付与しないと、他システムから作成したユーザでアクセスが出来ないので必ず付与すること。**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/ac94124a-795e-d451-9812-5287ba270a4f.png)

##ユーザが作成されたか確認する。
```
SHOW GRANTS for 'node'@'localhost';
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/94076a75-9c32-b497-abfe-168b4f90533d.png)

##参照等可能テーブルを指定する。
```
GRANT ALL ON yamamoto.* to node@localhost;
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/d06ad1ac-42be-c291-a66b-38c392bbe81e.png)

##権限の付与結果を確認する。
```
SHOW GRANTS for 'node'@'localhost';
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/377fb8a3-2562-ad26-c5b8-75a3eab29326.png)

##node.jsに以下のプログラムを記載する。
```javascript
var http = require('http');
var fs = require('fs');
var querystring = require('querystring');
var path = require('path');
var url = require('url');
var mime = {
	".html": "text/html",
	".css": "text/css"
	// 読み取りたいMIMEタイプはここに追記
};
// requireの設定
var mysql = require('mysql');

// MySQLとのコネクションの作成
var connection = mysql.createConnection({
	host: 'localhost',
	port: 3306,
	user: 'node',
	password: 'pw',
	database: 'yamamoto'
});

var server = http.createServer(function (req, res) {

	console.log('req.url : ' + req.url);
	console.log('req.method : ' + req.method);

	if (req.url === '/' && req.method === 'GET') {
		// 接続
		connection.connect(function (err) {
			if (err) {
				console.error('error connecting: ' + err.stack);
				return;
			}
			console.log('connected as id ' + connection.threadId);
		});

		// userdataの取得
		connection.query('SELECT * from pet;', function (err, rows, fields) {
			if (err) { console.log('err: ' + err); }

			console.log('name: ' + rows[0].name);
			console.log('birth: ' + rows[0].birth);
			console.log('death: ' + rows[0].death);

		});
		// 接続終了
		connection.end();
		res.end('OK');

	}
});

// localhostの8000番ポートでサーバーを起動する
var port = process.env.PORT || 8000;
server.listen(port, function () {
	console.log("To view your app, open this link in your browser: http://localhost:" + port);
});

```

##node.jsを起動する。
起動してMySQLから値を取得した結果は以下の通り。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/0964b5ba-34ae-ee1a-41a0-f8889628720b.png)