Node.jsの Webサーバから MySQLを操作する

JavaScript

Node.jsの Webサーバから MySQLを操作する

macOS 10.15.7 / MySQL Server 5.7.16 / node v19.3.0
Node.jsで作成しサーバを介して、MySQLデータベースに接続し、SQLステートメントを実行するWebアプリケーションを作成する。
必要なモジュール
使用するデータベース/テーブル
処理方式は Ajaxとする。クライアントは JavaScriptの XMLHttpRequestオブジェクトを利用し、サーバに POSTコマンドを送信する。サーバは Node.jsの expressモジュールで実装し、データベースとのインタフェースは mysqlモジュールを利用する。
Ajax、Node.jaによるサーバ処理とMySQLの操作について以下の章を参照されたい。
本章ではこれらの技法を組み合わせて、MySQLにアクセスする一般的で単純な Webアプリケーシの作成方法を紹介する。
処理の流れ
HTMLページのロード時に GETコマンドをサーバに送る。サーバは引数に指定された codeをキーに stockテーブルから合致したレコードを取得しクライアントに返す。クライアントはレコードを編集してページに表示する。
image3
HTMLソース
JavaScript

サーバ処理(Node.js)

初期設定とサーバの起動
HTMLページ表示の要求
HTMLファイル(上記)を読み込み、レスポンスデータとしてクライアントに返す。
テーブルレコード取得の要求
データベース(practice)に接続し、パラメータに指定された値(code)をキーにして、テーブル(stock)からレコードを抽出し、JSON形式のデータとしてクライアントに返す。データベースは切断する。

MySQLへの接続タイミング

Webサーバから MySQLデータベースにどのようなタイミングで接続/切断を行うべきか。いくつか方法がある。
方法1
リクエスト受信時にそのつど接続/切断を行う。本章の実装はこの方法である。
方法2
サーバー起動と同時に接続し、サーバーが終了するまでそのままにしていくことも可能である。切断はサーバが終了したとき自動的に行われるので特にアプリケーションでは必要はない(らしい)。connectionオブジェクトをグローバル域に定義し、メッセージ処理ごとのコネクションの切断を止める。
複数のリクエストをサーバに同時に送信し、同一の connectionオブジェクトを使って並列的にデータベース処理を行なったが、全て正常に終わった。特に問題はないようである。
方法3
データベース接続プールを利用する。これはデータベースとの頻繁な接続を抑制し、システムの負荷を軽減する仕組みである。
サーバ起動時に createPoolメソッドによりはコネクションの集合体である接続プールを確保する。リクエストを受信するつど getConnectionメソッドにより接続プールからコネクションをひとつ取得し、これを利用してデータベースに対して操作を行う。終われば releaseメソッドによりコネクションを接続プールに返却する。
いずれの方法でも実装は可能である。どれが正解なのかは条件次第であろう。稼働率の高いシステムであれば「方法3」が望ましいように思うが、はっきりしたことはわからない。