Help us understand the problem. What is going on with this article?

【Node.jsからMySQLに接続】

以前バイト先で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を試して記事にしてみたいと思います。
最後まで読んでくださってありがとうございます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away