async
async(https://github.com/caolan/async)はもう公式のutilに入れてほしいぐらい使いまくっているモジュールです。node.jsは非同期なので、普段JavaScriptに使うループ式は実用性は低いので、その代わりにasync.each、async.mapなどを使うことが多いです。
async.each
基本形式:
Array配列の各要素がElemen
tに渡され、Callback1
のdone
が要素処理のコールバックで、「処理完了」というフラグに使います。done
に第一引数が渡されたら(例えばdone(err))、ループから脱出し、Callback2
にdone
の引数が渡されてコールされます。
Object
をループしたい場合は、Object.keys
を利用して、Object
のkey
をイテレートします:
async.waterfall
メソード名waterfall
から分かると思うが、滝みたいに順番を処理していくメソードです。
上記は仮の例ですが、アプリの初期化から、起動、モデルの初期化までの各処理を関数化して、waterfall
を使ってステップバイステップで実行されます。もしapp
に対して新しい処理をやりたければ、新しい関数を作成し、waterfall
の順番を見て適切なところに入れれば済むのです。middleware
パターンと似ています。
asyncはプログラミングでよく使うロジックメソードがたくさん入っています。node.jsプロジェクトでは欠かせないモジュールとも言えると思います。
commander
コマンドツールを作る定番のモジュールです。apiが非常に使いやすいです。
上記のコードを./say
というファイルとして保存して、コマンドツールで
を叩くと:
が表示されます。-l
オプションをつけてみます:
commander
はアプリのコンソールツールを作成するに、非常にパワフルで便利なモジュールです。
String.js
String.jsは(http://stringjs.com/)、JavaScriptのStringオブジェクトに不足しているメソードをよくカバーしてくれるモジュールです。
string.jsを使えば、文字列の処理が相当楽になります。おすすめです。
moment.js
momnet.jsは(http://momentjs.com/) フロントとバックエンド両方使える、時間処理のモジュールです。
公式サイトで詳しい説明が載ってあるので、もっと知りたい方は公式サイトを参考してください。
fs-extra(https://github.com/jprichardson/node-fs-extra)名前通り、ネイティヴモジュールfsを拡張したバージョンです。必要とは言えないが、DRYを求める人には便利なツールだと思います。個人でよく使っています。
fs.copy
ファイルを指定した場所に保存する:
fs.ensureDir
フォルダを確保する:
そのほかにも便利なメソードがたくさんあります。公式のドキュメントを参考してください。
まとめ
node.jsには優秀なモジュールがいっぱい揃っています。モジュールをうまく使えば開発が倍速になります。もちろん、使いすぎるとモジュール依存が強くなって、保守には難しくなるリスクもあります。ここで紹介したモジュールはどれも安定しているので、プロダクションに使っても問題ないと思います。