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

2022年10月29日Node

node.js
ミニマリスト_カミ

みなさんこんにちは!
カミ@god48_です。

みなさんnodeでのデータベース接続の知識はありますか?
データベースへの接続はconnectionPool(コネクションプール)を採用することがほとんどです。
この記事ではnodeのデーターベースやconnectionPoolについて聞いたことはあるけど、いまいちデータベースの接続やconnectionPoolについてよく分かってない方や、
全く知識がない方へconnectionPoolへの接続方法の紹介をしていきます。

この記事でわかること

  • connectionPool(コネクションプール)とは?
  • NodeでconnectionPool(コネクションプール)をする
  • NodeでSQLを非同期通信する
  • Nodeでコネクションを使い回す

この記事を最後まで読めばデータベースについての理解が深まりますので、最後まで読んでコネクションプールについてマスターしましょう。

それでは順に見ていきましょう。

connectionPool(コネクションプール)とは?

NodeでconnectionPool(コネクションプール)

icon

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

icon

コネクションプールの説明をしますね。

コネクションプールとは、データベース管理システム(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(ランテック)

僕への個人でもメンターでも、スクールでもお好きな方を活用ください。

NodeMySQL,Node.js

Posted by kami