事務所のMySQLで書いてあるDBをNode.jsで利用しようと思って、今日は
node-mysql https://github.com/felixge/node-mysql
を使ってみました、の巻。
#インストール
node-mysqlのREADMEには、npm install mysql@2.0.0-alpha3 と書いてありますが、 試しに npm install mysql とやると mysql@0.9.6 が入ってしまいます。
でも、-alpha3って微妙に嫌だなぁ、と思いつつnpm install mysql@2とするとやっぱり mysql@2.0.0-alpha3が入るのでした。まいっか。
npm install mysql@2
#コードを書く
今日は、今使ってるDBへのアクセスだけなのでとりあえずこんな感じ。
データベース piyo_db
テーブル piyotable
このMySQLテーブルのUserNO が '012345678' なデータを取り出しconsole.logで出力してみます。
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost', //接続先ホスト
user : 'hoge', //ユーザー名
password : 'piyopiyo', //パスワード
database : 'piyo_db' //DB名
});
//SQL文を書く
var sql = 'SELECT * FROM piyotable WHERE UserNO = ?;';
//プレースホルダに差し込むデータ
var userId = '012345678';
//接続します
connection.connect();
//プレースホルダー使ってSQL発行
var query = connection.query(sql, [userId]);
//あとはイベント発生したらそれぞれよろしくねっ
query
//エラー用
.on('error', function(err) {
console.log('err is: ', err );
})
//結果用
.on('result', function(rows) {
console.log('The res is: ', rows );
})
//終わったよう~
.on('end', function() {
console.log('end');
connection.destroy(); //終了
});
#こんな結果になりました
$ node /home/hoge/mysqltest.js
The res is: { ID: 1435,
UserNO: '012345678',
usedtime: '2012/08/29 14:52:50',
data: 'OK(^^)/',
uptime: '2012/08/29 18:00:16' }
end
というわけで、これは特に問題なく動作しました。
#文字コードの件を別途調べる
でも、Node.jsはutf-8推奨なわけです。その世界では問題なくても、日本には結構古い文字コードも頑固に生き残っています。うちの事務所にもあります。
で、実は今回は当初、sjis-winを使ってる古いデータベースから取ってこようとしたのです。そして見事に文字化けしてしまいました。
そこで、これまで普通のEUCのページを取ってくるのに成功しているnode-iconvで乗り切ろうと思ったのだけれど、これが、当然最近の日本のパッチ( http://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.html )などがあたってるというわけでもないようでなかなかうまくいかない。
ということで、急遽、node-iconvについても少し調べてみることにしました。
これです。
node-iconvで使える文字コードを調べてみた
http://qiita.com/items/3cf99d91d3784f5a47c4