内容
業務でよく使いそうなことが書いてあるところをまとめる
とりあえず困ったら
公式リファレンス https://nodejs.org/en/docs/
最新バージョン https://nodejs.org/api/
バージョン4系 https://nodejs.org/dist/latest-v4.x/docs/api/
バージョン0.12系 https://nodejs.org/docs/v0.12.7/api/
Nodeの依存関係
-
module.exports
ソースを追う時module.exportsやexports.xxxでモジュールを定義、requireで読み込まれるので、そこを追ってく。書き方いろいろある
http://www.yoheim.net/blog.php?q=20150101 -
node_modules
npmモジュールをグローバルとローカル両方入れてて片方だけカスタムしてる場合とかある。その時読み込まれるnode_modulesのロード順序
https://www.ryuone.com/diary/20110328.html -
JSにおけるPrototype
最近のnodeはclassが使えるけど、古いモジュールはPrototypeで構成されてるのでそこらへんの基本も覚えたい
http://qiita.com/takeharu/items/809114f943208aaf55b3
よく使う標準モジュール
npm installで入れなくても使える基本関数
let module = require('{モジュール名}');
で使う
fs
ファイル入出力
https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback
child_process
コマンドexecしたり子プロセス立ち上げたり
https://nodejs.org/api/child_process.html#child_process_child_process
process
プロセスの情報を取得したりいろいろする
https://nodejs.org/api/process.html
プロセスに対するシグナル受け取る
https://nodejs.org/api/process.html#process_signal_events
コマンドライン引数受け取る
https://nodejs.org/api/process.html#process_process_argv
プロセスが落ちないようにエラーハンドリング
https://nodejs.org/api/process.html#process_event_uncaughtexception
util
その他いろいろ
https://nodejs.org/api/util.html
ハッシュ(Object)を詳細にダンプ
https://nodejs.org/api/util.html#util_util_inspect_object_options
Ecma記法
最近のバージョンだとEcmaScript6に対応していたりするので、classやPromiseやlet、constが使えます
https://html5experts.jp/1000ch/16984/
通信周り
Socket.IO
- 旧バージョンだけど基本的なところ説明している記事
http://jxck.hatenablog.com/entry/20110730/1312042603 - 公式 http://socket.io/docs/
- ルーム管理 Rooms and Namespaces
- Cluster化やマルチプロセス化 Server#adapter(v:Adapter):Server
↓拙作ですがCluster化sample
https://github.com/natsuki-yamanaka/cluster_and_socketio
httpモジュール
https://nodejs.org/api/http.html#http_event_connect
↓記事みたいにローカルで簡単にサーバー立てられる
http://jxck.hatenablog.com/entry/20101022/1287765155
Socket
UDP、TCPそれぞれでSocket作れる
https://nodejs.org/api/dgram.html#dgram_udp_datagram_sockets
http://takaheraw.hatenablog.com/entry/2013/01/04/115434
非同期処理
非同期処理を単純に書いていくとコールバックのネストがどんどん増えていきいわゆるコールバック地獄になります。なので何かしらのライブラリで非同期処理を縦に流れる処理のように書くことが多いです。
ベストプラクティスは人によって違うし、Nodeのバージョンによっても変わっていくのでプロジェクトで採用されているものがあればそれに従うか、自分が選べるなら好みのものを選びましょう
標準関数
v4くらいからはPromiseやyieldが標準で使えるので、それが多いかも
http://qiita.com/kidach1/items/d997df84a0ede39d76ad
npmモジュール
標準が定まっていなかった0.x系はモジュールで非同期処理書くことが多かったです。
JSに非同期処理のライブラリが数多いので、自分が知っているものをいくつか挙げておきます
- async.js
昔自分のプロジェクトで採用されてた
http://qiita.com/takeharu/items/84ffbee23b8edcbb2e21 - JSDeferred
https://cho45.stfuawsc.com/jsdeferred/ - Q
http://qiita.com/Awa_Dama/items/3f73ec4f5bf94bac2094 - bluebird
旧バージョンでもPromise的な書き方できる?
http://bluebirdjs.com/docs/getting-started.html
そもそもNode.jsって
何が特徴で、何がメリットか?記事古いけど現在Node.jsのコミッターしてる方の記事
http://www.iij.ad.jp/company/development/tech/activities/nodejs/
処理が非常に短時間でイベント処理が重要なアプリ(よく言われるチャットアプリ)などでは、Node.jsはそのメリットを最大限に生かせる領域です。
言語の特徴として
- ノンブロッキングIO
- シングルスレッド・シングルプロセス
- イベントループモデル
あたりを取り上げておきます。説明は長くなる+難しいので別記事で(書かないかもしれない)