LoginSignup
17
24

More than 3 years have passed since last update.

【Node.jsからMySQLに接続】

Last updated at Posted at 2019-06-15

以前バイト先でNode.jsを扱っていたので、忘れないようにNode.jsでMySQLに接続する方法を備忘録として残そうと思います。
今回のソースコードではローカルのDBに接続しています。

開発環境

  • macOS Mojave バージョン10.14.4
  • Node.js v11.6.0
  • npm 6.8.0

ディレクトリ構造

NodeTest/
├ app.js
├ mysqlConnection.js
├ package-lock.json
├ package.json

モジュールのインストール

$npm install mysql

DBを定義

mysqlConnection.js
//mysqlモジュールを呼び出します
var mysql = require('mysql');

//DBの定義
var dbConfig = {
  host     : 'localhost', //接続先ホスト
  user     : 'root',      //ユーザー名
  password : '',          //パスワード
  database : 'test'       //DB名
};

var connection;

function handleDisconnect() {
    console.log('create mysql connection');
    connection = mysql.createConnection(dbConfig); //接続する準備

    //接続
    connection.connect(function(err) {
        if(err) {
            console.log('error when connecting to db:', err);
            setTimeout(handleDisconnect, 2000); //2秒待ってから処理
        }
    });

    //error時の処理
    connection.on('error', function(err) {
        console.log('db error', err);
        if(err.code === 'PROTOCOL_CONNECTION_LOST') {
            handleDisconnect();
        } else {
            throw err;
        }
    });

    module.exports = connection; //connectionを(他のファイルから)requireで呼び出せるようにする
}

handleDisconnect();

クエリの実行, HTTP接続

app.js
//モジュールを読み込む
var http = require('http');
var express    = require('express');
var app        = express();
var mysql = require('mysql');

//mysqlConnection.jsで作成したconnectionを呼び出す
var connection = require('./mysqlConnection');

//サーバー作成
var server = http.createServer(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
  res.write('Hello Ryu1!');
  res.end();
});

//クエリ作成
app.get('/', function (req, res) {
  console.log("dbの内容を取り出す");
  //クエリ文
  connection.query('select name from testTable where id = 0', function (error, results, fields) {
    if (error) throw error; //errorの場合
    res.send(results);//画面にresponseとして表示
    console.log("results: " + results[0].name); //jsonで受け取った場合の値の取得方法
  });
});

//サーバー起動。listen()メソッドを実行して3000番ポートで待ち受けする。
app.listen(3000, function () {
  console.log('listening on port 3000');
});

最後に

次回はAzureのAzure Database for MySQLを試して記事にしてみたいと思います。
最後まで読んでくださってありがとうございます。

17
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
24