node.jsのいろいろなモジュール9 – mysqlへの接続

2012.02.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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用モジュールはたくさんあるので、必要なときにいろいろと比較してみてください。

参考サイトなど