以前「CoffeeScript を試してみる」というネタを書きましたが CoffeeScript は node.js で使うことができるので node.js に入れて試してみます。
まずはグローバルインストール。
$ sudo npm install -g coffee-script
CoffeeScript のソースを書きます。
$ vi test.coffee
alert "hello"
こんな感じ。
CoffeeScript が 全然わからない、って人は 下のサイトが参考になると思います。
[参考]
CoffeeScriptってなんぞ?
コンパイルすると js ファイルができます。
$ coffee -c test.coffee
できた js ファイルを見てみます。
$ cat test.js
(function() { alert("hello"); }).call(this);
ちゃんと JavaScript になってました。
node.js には express という Web フレームワークがあり これを使うと簡単に Web システムの雛形が作れるそうなので 試してみます。
次のサイトを参考に進めました。
[参考]
Node.js(Express)アプリの雛形を自動生成する - アインシュタインの電話番号
express をグローバルインストール。
これで express コマンドが使えるようになります。
$ sudo npm install -g express $ express -v 2.5.8
"-g" オプションでグローバルインストールです。
上記のサイトでやってるように hoge というアプリを作成します。
$ express hoge $ cd hoge $ sudo npm link express $ npm install jade
express と jade も入れています。
express は、グローバルインストールしてあるのでリンクで入れます。
こうするとシンボリックリンクが作成されます。
これでもう雛形ができました。
さっそく動かしてみます。
$ node app.js
Express server listening on port 3000 in development mode
ポート 3000 で Web サービスが起動します。
http://127.0.0.1:3000/
次のような画面が表示されます。
ソースを修正して表示を "Welcome to Hoge" にします。
ソースを修正するたびに 毎回 Web サービスを起動するのは面倒なので 自動的にリロードしてくれるコマンドを入れます。 これも上記の参考サイトの通りです。
node-dev をグローバルインストールします。
$ sudo npm install -g node-dev
node コマンドの代わりに node-dev コマンドで起動します。
$ node-dev app.js
Express server listening on port 3000 in development mode
Web サービスが起動した状態で ソースを修正します。
バージョンが代わっているせいか 上記の参考サイトとは違うファイルでした。
$ vi routes/index.js
/* * GET home page. */ exports.index = function(req, res){ res.render('index', { title: 'Express' }) // "Hoge" に変更 };
Web サービスを起動したコマンドの方を見ると ソースを変更したことによって リスタートしているようでした。
$ node-dev app.js Express server listening on port 3000 in development mode [INFO] Restarting Express server listening on port 3000 in development mode
アクセスしてみます。
http://127.0.0.1:3000/
表示内容が変わりました。
とりあえずここまで。確かに簡単ですね。
node.js と mongoose をインストールしたので node.js から MongoDB の値を取得してみます。
次のサイトを参考に進めました。
[参考]
mongooseを使ってmongodbにアクセスしてみる - A Peak Never Ending !
まず MongoDB にデータを登録します。
$ mongo MongoDB shell version: 1.2.2 url: test connecting to: test type "exit" to exit type "help" for help > use memo switched to db memo > db.memos.save({title:'test title1', body:'test body1'}) > db.memos.save({title:'test title2', body:'test body2'}) > exit
データベースは memo、コレクションは memos にします。
node.js のスクリプト memo.js を作ります。
上記の参考サイトのスクリプトをそのまま貼り付けます。
$ vi memo.js
/* * Mongooseでデータを取り出して表示するテスト */ var mongoose = require('mongoose'); // スキーマ定義 var MemoSchema = new mongoose.Schema({ title: String, body: String }); // モデルとして登録 var Memo = mongoose.model('Memo', MemoSchema); // mongodbに接続 mongoose.connect('mongodb://localhost:27017/memo', // memoの部分はデータベース名 // コールバックでエラー時の処理が書けるみたい。 function(err) { if (err) { console.log(err); } else { console.log('connection success!'); } } ); // findしてコンソールに出力 Memo.find({}, function(err, docs) { if(!err) { console.log("num of item => " + docs.length) for (var i = 0; i < docs.length; i++ ) { console.log(docs[i]); } mongoose.disconnect() // mongodbへの接続を切断 process.exit() // node.js終了 } else { console.log("find error") } });
実行してみます。
$ node memo.js
connection success!
num of item => 2
{ _id: 4f73edfbb7c76c517dc7eb16,
title: 'test title1',
body: 'test body1' }
{ _id: 4f73edffb7c76c517dc7eb17,
title: 'test title2',
body: 'test body2' }
node.js から MongoDB の値が取得できました。
これで、できることの幅が広がりました。
作業メモです。
前回の node.js の続きです。
今回は mongoose を入れます。
mongoose は node.js から mongodb を ORM っぽくアクセスするためのライブラリです。
mongoose のインストールには npm を使います。 npm は、前回の node.js のインストールで入っています。
$ which npm
/usr/local/bin/npm
プロキシ認証が必要な環境だとちょっと大変です。
まず npm にプロキシの設定をします。
$ npm config set proxy http://USER:PASSWORD@SERVER:PORT
プロキシを使う環境だと DNS が引けなくても大丈夫だったりしますが npm では下のサイトに書いてあるように名前の解決ができくてエラーになってしまいました。
[参考]
Proxy環境下でnpmインストール :ダメ人間オンライン
DNS を設定するか /etc/hosts に接続先の registry.npmjs.org を追加したりして対応します。
mongoose のインストール。
$ npm install mongoose
・・・と思いきや、またもやエラーが出ます。
npm http GET https://registry.npmjs.org/mongoose npm ERR! Error: connect ECONNREFUSED npm ERR! at errnoException (net.js:670:11) npm ERR! at Object.afterConnect [as oncomplete] (net.js:661:19)
次のサイトに書いてあるように https だとうまくいきません。
[参考]
WindowsXP + プロキシ環境でnpmを使う - 四角革命前夜
ホームディレクトリに .npmrc ができているので編集します。
$ vi ~/.npmrc
プロキシの設定が書いてあるので 次の行を追加します。
registry = http://registry.npmjs.org/
もう 1 度インストール。
$ npm install mongoose
今度は成功しました。
作業メモです。
まず、ソースをダウンロード。
$ wget http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz
解凍。
$ tar xzvf node-v0.6.14.tar.gz $ cd node-v0.6.14
configure 。
$ ./configure
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/bin/gcc
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : yes
Checking for library util : yes
Checking for library rt : yes
Checking for fdatasync(2) with c++ : yes
私の環境では 最初 次のようにエラーが出たので libssl-dev をインストールしました。
Checking for openssl : not found Checking for function SSL_library_init : not found Checking for header openssl/crypto.h : not found /home/odin/node-v0.6.14/wscript:374: error: Could not autodetect OpenSSL support. Make sure OpenSSL development packages are ...
$ apt-get install libssl-dev
make と make install 。
$ make $ sudo make install
node コマンドを実行してみます。
$ node > 3 + 5 8 > var a = 3; undefined > console.log(a); 3 undefined
これで終わりです。