この記事は公開されてから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用モジュールはたくさんあるので、必要なときにいろいろと比較してみてください。
参考サイトなど
- node-mysql: https://github.com/felixge/node-mysql