node.js で CoffeeScript を試してみる 1

以前「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 を使ってみる

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/

次のような画面が表示されます。

WRITE_0556_01

ソースを修正して表示を "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/

WRITE_0556_02

表示内容が変わりました。

とりあえずここまで。確かに簡単ですね。

node.js から MongoDB を使ってみる

node.jsmongoose をインストールしたので 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 の値が取得できました。
これで、できることの幅が広がりました。

Ubuntu10.04 に mongoose をインストールする

作業メモです。
前回の 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

今度は成功しました。

Ubuntu10.04 に node.js をインストールする

作業メモです。

まず、ソースをダウンロード。

$ 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

これで終わりです。