非同期な http のナニ
Facebook の API をタタいて云々、みたいなことしてるんですが Node.js の http ってモジュールは非同期でかつ 'data' な callback がバラで送付されてくるレスポンス毎に発生してることを知らずにハマりました。
ざっくりな実装が以下なんですが、
var response_data = ''; request = https.request(options); request.on('response', function(response) { response.setEncoding('utf8'); response.on('data', function(chunk) { response_data += chunk; }); response.on('end', function() { var obj = (new Function("return " + response_data))(); res.send(obj); }); }); request.on('error', function(e) { console.log('error: ', e.message); }); request.end();
最初 'data' な callback で res.send とかヤッてて多重なヘッダ送付はダメ! 的例外が出てて訳が分からず。ちゃんと仕様は守ろうね、って言われつつ肩をぽん、ってタタカれた情け無さ満点な気分ッス。
認証処理でリダイレクトとかしてるんですが、その時にも認証なナニと http なやりとりしてて 'data' な callback でリダイレクトしちゃって認証通らねぇ、とか言いつつハマッておったのは秘密です。
で
上記の res.send は res.json にしたらどうなるか、と言いつつ app.js を scp しようとしたら node-ninja がオチている模様。ベータですからね。でも ban しないで下さいね (何
Web サーバにもアクセスできない模様。なので帰ろう。その頃には直ってて欲しい。
オチ
ちなみにこのエントリ、帰宅後に書いてます。職場の内部 dns (ってか無線ルータ) が死んでて internet にアクセスできなかったので。そーゆー意味ではサーバが死んでたのではなくて、こっち側の問題だった訳ですorz
これからメシ喰ってもくもくの予定。