【Nodeでmysql】データベースへconnectionPool(コネクションプール)接続する


みなさんこんにちは!
カミ@god48_です。
みなさんnodeでのデータベース接続の知識はありますか?
データベースへの接続はconnectionPool(コネクションプール)を採用することがほとんどです。
この記事ではnodeのデーターベースやconnectionPoolについて聞いたことはあるけど、いまいちデータベースの接続やconnectionPoolについてよく分かってない方や、
全く知識がない方へconnectionPoolへの接続方法の紹介をしていきます。
この記事でわかること
- connectionPool(コネクションプール)とは?
- NodeでconnectionPool(コネクションプール)をする
- NodeでSQLを非同期通信する
- Nodeでコネクションを使い回す
この記事を最後まで読めばデータベースについての理解が深まりますので、最後まで読んでコネクションプールについてマスターしましょう。

それでは順に見ていきましょう。
connectionPool(コネクションプール)とは?
NodeでconnectionPool(コネクションプール)

コネクションプールって何ですか?

コネクションプールの説明をしますね。
コネクションプールとは、データベース管理システム(DBMS)へアクセスする際に、その都度、データベースへアクセスや切断をするのではなく、
一度形成したコネクションを使い回す手法です。
Nodeでコネクションプールをする
Nodeでコネクションプール
const mysql = require('mysql')
const pool = mysql.createPool({
connectionLimit : 1,
host: 'localhost',
user: 'root',
password: 'root',
database: 'node_mysql_sample',
charset: 'utf8mb4',
timezone: 'jst'
})
createPoolは使い回しなので、別ファイルで使用することを想定してexportして、
使いたいファイルでimportを行います。
const mysql = require('mysql');
exports.createPoolDb = (() => {
const pool = mysql.createPool({
connectionLimit : 1,
host: 'localhost',
user: 'root',
password: 'root',
database: 'node_mysql_sample',
charset: 'utf8mb4',
timezone: 'jst'
})
})()
スポンサードサーチ
NodeでSQLを非同期通信する
NodeでSQLを非同期通信する
const mysql = require('mysql')
const util = require('util')
const mysqlCreatePool = mysql.createPool(pool)// 引数にDB設定
mysqlCreatePool.query = util.promisify(pool.query)
utilをrequireしてmysql.createPoolして、
utilのライブラリでpromisifyにpool.queryを渡してください。
Nodeでコネクションを使い回す
Nodeでコネクションを使い回す
const dbPoolGetConnection = (dbPool) => {
return new Promise((resolve, reject) => {
pool.getConnection(function (error, connection) {
if (error) {
return reject(error)
}
resolve(connection)
})
})
}
module.exports = {
dbPoolGetConnection,
}
pool.getConnectionで非同期通信を行いデータベースで接続します。
async function connectionStart() {
const connection = await new Promise((resolve, reject) => {
pool.getConnection((error, connection) => {
if (error) {
reject(error)
}
resolve(connection)
})
})
const results = await new Promise((resolve, reject) => {
connection.query('SELECT * FROM node_mysql_sample, (error, results) => {
if (error) {
reject(error)
}
resolve(results)
})
})
console.log(results[0])
// connection.release()
}
async (() => {
await connectionStart()
pool.end()
})()
コネクションを非同期処理で行なってない場合は、関数毎に非同期処理を追加してあげてください。
スポンサードサーチ
まとめ

みなさんNodeでのconnectionPool(コネクションプール)は覚えましたか?
- DBの接続はmysqlモジュールとcreatePoolで行う
- DB接続はconnectionPool(コネクションプール)で使い回す
実装やエラーが解決できない場合
プログラミングの実装やエラーでどうしてもわからない場合はメンターに相談するのが一番です。
考えている、見えている範囲が狭くなり、解決から遠くに行って何時間も、何日も経っていることなんてよくある話です。
そういう時は聞ける先輩や、メンターに相談することが大事です。
僕にも相談可能なので気軽に相談してください。

Twitterからの連絡だと確実ですよ。
オンラインスクールやプログラミングスクールといったプログラミングを学べる方法もあるので、そちらもぜひ活用してもいいと思います。
Web開発で分からない時
オンライン完結型スクール DMM WEBCAMP PROアプリ開発で分からない時
プログラミング×稼げる副業スキルはテックキャンププログラミングについて分からない時
RUNTEQ(ランテック)
僕への個人でもメンターでも、スクールでもお好きな方を活用ください。