[node.js] Surface Pro 2に開発環境を作ろう!

一度触ってみたかったので、node.jsを入れます。

公式ページ
http://nodejs.org/
日本語ページ
http://nodejs.jp/nodejs.org_ja/
日本ユーザズグループ
http://nodejs.jp/

node.jsとは何者か?ていうのが、正直よくわかってないので素直にインストーラからインストールしました。

インストールすると、アプリ画面にアイコンがいくつかできます。 20131231_node_5
必要なのはNode.js command promptです。スタート画面かタスクバーにピン止めしておきましょう。
Node.js command promptは、node.exe等の関連ファイルにPathが通ったコマンドプロンプトです。

Node.jsのプログラムはテキストエディタでJavaScriptで書きます。適当に作業フォルダ作って、そこにファイル作成しましょう。
とりあえずのHelloWorld。

var sys = require('sys');
var http = require('http');
var server = http.createServer(
    function (request,response){
        response.writeHead(200, {'Content-Type' : 'text/plain'});
        response.write('Hello,world!\n');
        response.end();
    }
).listen(80);
sys.log('Server is running!');

これを「D:\nodejsWork\helloWorld.js」で保存します。
接続ポートは標準http(80)指定してますが、Apacheなど起動していた場合、80ポートはすでに使われているので、別ポートにしましょう。

「Node.js command prompt」を起動して、該当のフォルダへ移動してから、
「node helloWorld.js」で起動します。

20131231_node_1

ブラウザから繋いでみる。

20131231_node_2

繋がりました。停止するにはコマンドプロンプトで「Ctrl + C」です。

せっかくなのでMySQLに繋げてみたいと思います。

node-mysqlをインストール。node.jsのライブラリはnpmコマンドでインストールします。
「Node.js command prompt」で「npm install mysql」です。

20131231_node_3

カレントフォルダの下の「node_modules」にインストールされるみたいです。今回の場合は「D:\nodejsWork\node_modules」ですね。
プロジェクトごとに、必要なモジュールを入れる感じなのかな?よく使うものはnode.js共通モジュールとしてどこかに置いておけそうな気もしますが、どうなんでしょ。

DB接続とデータ取得をプログラムに追加。

var sys = require('sys');
var http = require('http');
var mysql = require('mysql');

var server = http.createServer(
function (request,response){
     //データベースへ接続
     var connection = mysql.createConnection({
          host: 'localhost',
          database: 'personal',
          user: 'root',
          password: 'password'
     });

     response.writeHead(200, {'Content-Type' : 'text/html'});
     response.write('<html>');
     response.write('<head><title>Hello,Pokemon!</title></head>');
     response.write('<body>');

     var query = connection.query('SELECT name,voice FROM pokemon ORDER BY name');
     query
          //エラーの場合ここが呼び出される。
          .on('error', function(err) {
              console.log('Error!: ', err );

               response.write('Error!\n');

            })
           //ここが1レコードずつ呼び出される。
            .on('result', function(row) {
                    response.write('<p>');
                    response.write('「こんにちは、' + row.name + '!」');
                    response.write('「' + row.voice + '!」');
                    response.write('</p>');
                    console.log('write Record Data');
          })
           //全部読み終わったらここが呼び出される。
            .on('end', function() {
               response.write('</body>');
               response.write('</html>');
              console.log('response End');
               response.end();
               connection.end();
       });
}
).listen(80);
sys.log('Server is running!');

先日のMySQLを起動して、接続。

20131231_node_4

うまく出ました。ちなみに ‘error’ が発生した場合も ‘end’ は呼ばれてました。

これだと毎回DB接続切断してるのが嫌なのでコネクションプール使いたいんだけど、使えるのかな?mysql.createPoolてのがあるようなので、また見てみます。

EJSテンプレートエンジンやExpressフレームワークも試してみたいですね。

今日はここまで!