Node.js Run Down

- 怖くないNode.js入門 -
at 2012/01/28
by 渡辺俊輔 @craftgear

Node.js(正式名称:Node)

Node is ...

Node does ...

javascript without DOM

Javascript with Node modules

javascript with thriving eco system

install

node

  • Linux nave
  • Mac Homebrew or nave
  • Windows ?

npm

  • Linux and Mac
    curl http://npmjs.org/install.sh | sh
  • Windows ?

Keywords

  1. 非同期

  2. コールバック

  3. クロージャ

keyword

  1. 1.非同期

非同期 =イベントドリブン

keyword

  1. 2.コールバック

コールバック = イベントハンドラ

keyword

  1. 3.クロージャ

クロージャの出番

  1. インスタンス変数(らしきもの)の保護
  2. ループ内での変数の保護

Tips & Tricks

forにご注意

クロージャで変数の値を保護するか

forEachをつかおう

process.nextTick()

  • 関数のコールスタックにコールバックを追加する
  • ブロックしないループに使う
  • インスタンス変数の初期化

引数の習慣

  • エラーが最初に来る
  • コールバックは最後に来る

無名関数を作って即実行する

こう書くより
こう書くほうが短い

CoffeeScript

Javascriptで書くと
CoffeeScriptで書くと

前回のフォローアップ(1)

  • Expressでのファイルアップロードについて
    • connect1.8以降ではbodyParserにuploadDirを指定するだけでファイルアップロードできるようになっています
      app.use(express.bodyParser({
          uploadDir: './uploaded_files'
      }))
      
    • アップロードされたファイルの情報はreq.filesに入ります
    • connectのバージョン確認は npm ls
    • 中身はformidableです

前回のフォローアップ(2)

  • Express3について
    • ビューのlayoutがなくなります
    • partialもなくなります
    • req.flashがなくなります
    • helperとdynamicHelperがなくなります
    • res.renderの最初の引数がHTTPコードになります

前回のフォローアップ(3)

  • CoffeeScriptの暗黙のスコープ継承問題
  • foo = ()->
       x = 'x'
       console.log x
    foo() //-> 'x'
    console.log x  //->ReferenceError
    
  • 先頭にうっかり同じ名前のグローバル変数を追加すると・・・
  • x = 'a'
    foo = ()->
       x = 'x'
       console.log x
    foo() //-> 'x'
    console.log x  //-> 'x', should be 'a'
    
  • The Problem with Implicit Scoping in CoffeeScript

最後に

  • Nodeを使う理由