Hatena::ブログ(Diary)

ぽりぴぃすらいと このページをアンテナに追加 RSSフィード Twitter

プロフィール

muddydixon

muddydixon

すきなものたれながし

カテゴリー
言及ISBN/ASIN
  • ディレクターズ・カット 燃えよドラゴン 特別版 [DVD]
  • クレイジー / ビューティフル [DVD]
  • 岩波講座 ソフトウェア科学〈〔知識〕15〉自然言語処理
  • Death Proof
  • ノッキン・オン・ヘブンズ・ドア [DVD]
  • 死ぬまでにしたい10のこと [DVD]
  • しゃべれども しゃべれども 特別版 (初回限定生産2枚組) [DVD]
  • かぶく者(1) (モーニングKC)
  • かぶく者(2) (モーニングKC)
  • ハライソ―笑う吸血鬼 2
  • レッド(1) (イブニングKCDX)
  • マジで儲かる5秒前!知らないあなたが大損しているタウンページ戦略法
  • DS文学全集
  • DS文学全集
  • フロム・ダスク・ティル・ドーン [DVD]
  • ノッキン・オン・ヘブンズ・ドア [DVD]
  • 時計じかけのオレンジ [DVD]

2011/05/28(Sat)

7分半で作るNode.js+MongoDBアプリ

| 21:09 | 7分半で作るNode.js+MongoDBアプリを含むブックマーク 7分半で作るNode.js+MongoDBアプリのブックマークコメント

先日のJJUG SpringのLTをしてきた「7分半で作るNode.js+MongoDBアプリ」の動画を撮り直しました。

本番ではmongoose.Schemaのところをmongoose.modelとしてしまい、まさかのライブデバッグを初めるハメになり、結果として13分となってしまいました。

リベンジとして今日何回かトライしたところ10分を2分半も上回る7分半、スリークォーターの記録を出すことができました。

D

動画中でやってること

  • 1 環境を証明
    • nvmとかnodeとかnpmとかがインストールされてないことを証明
    • env.shは確認するコードが書かれているだけです
  • 2 nvmとmongodbをググる
  • 3 nvmをgitで取得
$ git clone git://github.com/creationix/nvm.git ~/.nvm
  • 4 nvmを環境に読み込む
$ . ~/.nvm/nvm.sh
  • 5 nvmでv0.4.8をインストール(最近のやつだとnpmも自動でインストール)
$ nvm install v0.4.8
$ ./mongodb-linux-x86_64-1.8.1/bin/mongod --dbpath=/home/muddydixon/mongodb/db/ --logpath=/home/muddydixon/mongodb/log/mongod.log --fork
  • 10 nvmのインストールがまだ終わってないので、先行してコードを書き始める
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/sbm');
var Bookmark = new mongoose.Schema({title: String, url: String});
mongoose.model('Bookmark', Bookmark);
Bookmark = mongoose.model('Bookmark');

app.post('/', function(req, res)[
  if(req.body.url){  // 最悪でもurlぐらいはチェックする
    new Bookmark({title: req.body.title || req.body.url, url: req.body.url}).save(function(err){
      res.redirect('/'); // 保存したら/ にリダイレクト
    });
  }
});
  • 11 nvmが終わっているのでnpmでexpress, jade, mongooseをインストール(グローバルでインストールして、リンクを貼る)
$ npm install express jade mongoose -g
$ npm link express jade mongoose
  • 12 expressでsbmを作成
$ express sbm && cd sbm
  • 13 app.jsを編集
    • さっきの先行コードを適宜コピー
    • app.getを変更
app.get('/', function(req, res){
  Bookmark.find({}, function(err, bms){
    res.render('index', {
      bms: bms,
      title: 'Express'
    });
  });
});
  • 14 view/index.jadeを編集
div
  ul
    - bms.forEach(function(bm){
      li
        a(href= bm.url)= bm.title
    - })

form(action='/', method= 'POST')
  input(name= 'title')
  input(name= 'url')
  input(type= 'submit')
  • 15 app.jsを起動
$ node.app

あ、今回の実験ではニフティクラウドをお借りしました。モニターバンザイ!