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

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

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

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

動画中でやってること

  • 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
  • 6 その間にMongoDB(今回は64bit linux)をwgetでダウンロード
  • 7 MongoDBを解凍
  • 8 mongod用の各種ディレクトリ(db/log)を作成
  • 9 mongodを起動
$ ./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
  • 16 googleとniftyを登録して完了!(7:24)

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