node.jsのいろいろなモジュール9 – mysqlへの接続
MySQLへのアクセス
node.jsはサーバサイドで動くので、当然データの保存も行います。 データベースはJavaScriptとの親和性が高いmongoDBやcouhcDBとかといっしょに使用されてきるのをよく見ますが、 既存のRDBMSでも普通に使えます。 今日はMySQL用のクライアントモジュール、node-mysqlをご紹介。
インストール
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.3
- Node.js : v0.6.10
- npm : 1.1.0-3
適当なディレクトリを作成し、そこでnpmを使用してインストールしましょう。
%npm install mysql
インストールできたらnpmコマンドで確認します。
%npm ls /Users/mysql └─┬ mysql@0.9.5 └─┬ hashish@0.0.4 └── traverse@0.5.2
ではサンプルを動かしてみましょう。
サンプルを動かしてみる
mysqlモジュールは、MySQLクライアントを作成すればすぐにSQLの実行が可能です。 まずはMySQLを起動しておきましょう。サンプルプログラムの中でデータベース作成とテーブル作成を行います。
データベースを起動したら、次はinit.jsという名前でjsファイルを作成します。
//init.js var mysql = require('mysql'); var DB_NAME = 'mydb'; var TABLE = 'user'; //mysqlクライアント作成 var client = mysql.createClient({ user: 'ユーザー名', password: 'パスワード' }); //データベース作成作成 client.query('CREATE DATABASE ' + DB_NAME, function(err) { if (err && err.number != mysql.ERROR_DB_CREATE_EXISTS) { throw err; } }); //データベース選択 client.query('USE ' + DB_NAME); //テーブル作成 client.query( 'CREATE TABLE ' + TABLE + '(id INT(10) AUTO_INCREMENT, '+ 'name VARCHAR(100), '+ 'PRIMARY KEY (id))' ); //テストデータ作成 client.query( 'INSERT INTO '+ TABLE +' '+ 'SET name = ?', ['taro'],function(err, info) { console.log("insertID = " + info.insertId);} ); client.query( 'INSERT INTO '+ TABLE +' '+ 'SET name = ?', ['hanako'],function(err, info) { console.log("insertID = " + info.insertId);} ); //コネクションクローズ client.end();
mysqlモジュールを読み込んだ後、createClient関数でMySQLクライアントを作成しています。 クライアント作成時にはオプションを指定することが可能で、ホスト名やデータベース名、IDやパスワードなどと指定できます。 init.jsではデータベース作成を行うので、データベース名の指定は行いません。 データベースの作成後にuseで選択し、データの登録をおこなっています。 登録時に自動採番されたIDがほしい場合、query関数にコールバックを渡せば取得できます。
次にapp.jsという名前で、登録したデータを検索してみます。
//app.js var mysql = require('mysql'); var TABLE = 'user'; //mysqlクライアント作成 var client = mysql.createConnection({ user: 'ユーザー名', password: 'パスワード', database: 'mydb' }); //データの検索 client.query( 'select * from ' + TABLE, function (err, result, field) { if (err) { throw err; } console.log(result); console.log(field); client.end(); } );
さきほど作成したデータベースにアクセスし、データを取得します。 今度はcreateConnection関数を呼ぶときにデータベース名を指定しています。 queryのコールバックで取得したデータ内容とテーブルのメタデータを取得でいます。 最後にend関数でクライアントの接続を閉じて終了です。
まとめ
node.jsでMySQLへのアクセスは簡単できることがわかったかと思います。 これ以外にもMySQL用モジュールはたくさんあるので、必要なときにいろいろと比較してみてください。
参考サイトなど
- node-mysql: https://github.com/felixge/node-mysql