nodegrind -o app.cpuprofile ファイル名 でパフォーマンスの測定を行い、結果出力を行う。出力されたファイルはChromeのJavascript profileで読み込める。
echoのリダイレクト(閉じカッコ一つ)はファイルがない場合新規作成する。
git cloneで失敗する時 windows - いろいろ備忘録
node.jsのhttpモジュールにおいて、エラーはイベントで発生する。すなわち
のように、イベントを処理する「on」で、errorイベントを処理することになる。
node index.js 2>&1 | tee -a tmp.log
- nodeがログを出力する
- 2>&1によって、エラー出力が標準出力になる。
これがないと次のteeにエラー出力が渡せない。 - teeコマンドが標準入力を標準出力とファイルの両方に出力する。
- 結果、コンソールとファイルの両方に、info,warn,errorログの全てが出力される。
curlコマンドでは、-d オプションでPOSTできる。
-d 'message=testMessage' のように、POSTするデータがkey = valueの形になることに注意。HTMLでformにnameが必要なことと同じ。
レスポンスをStreamのpipe(出力先)で返せる。ストリームなのでメモリが節約できる。入力側で出力側のend()を呼ぶため、res.end()がいらないが、pipe()のオプションで変更できる。
上記コードはイベントループごとにfcが実行され、4回目のイベントループでパイプを解除し、end()する。
イベントループ1回目 次のイベントループにfcを登録する i == undefined
イベントループ2回目 fcを実行し、fc内で次のイベントループにfcを登録 i==1
イベントループ3回目 同上 i==2
イベントループ4回目 fcを実行するが、i==3となるのでパイプ解除とend()する
肝となるのは、実行するとHTMLが何も返らないこと。
ストリームから最初のデータが送出される前にunpipe()されるため。
イベントループの制限を4回ではなく10回とかにすると中途半端なHTMLが返る。ストリームの途中でunpipe()されるため。
1000とかにすると、完全にストリームが出力し終わった後となるので、おそらく全てのHTMLが出力されている。
node.jsのBASIC認証に使うauth.basicの第二引数
BASIC認証はBASE64エンコードしているだけなので盗聴されるとバレる。
BASIC認証では、401 Unauthorizedを返すことでログアウトが可能。
Cookieは毎回リクエストヘッダに挿入して送信されている。あまり肥大化するとサーバやネットワークに負荷がかかるため容量に制限がある。また、BASIC認証も毎回送信されている。HTTPはステートレスなため。
req.header.cookieは文字列。indexOf()やsplit()を使って目的のものを取り出す。
Anatomy of an HTTP Transaction | Node.js
req.on('data',(chunk)=>{})のイベント「data」は、イベントループごとに送られてきたデータが存在する時実行されるが、断片的なものであっても実行されるので、大きなデータや低速で送られてくる場合、すなわち一回のイベントループで全てのデータが来なかった場合はこれだけでは処理が難しい場合がある。普通は、イベント「data」では受信したバイト配列をappend()していき、受信し終わったときにイベント「end」がemitされるので、それでconcat()してtoString()などする。