勇者コレクター攻略日記

元々はプロのプログラマがレビューする転職情報。今は勇者コレクターの攻略がメイン

node.jsの入門用ハンズオン資料を読む

   

■ハンズオン
体験学習っていう意味らしい。
最近Web系の新しい技術を検索すると
ハンズオン資料とかが見つかるんだけど
実際に自分でインストール簡単なサンプルを作って
という構成になっている。便利。

■node.jsで非同期IOを使う

非同期IOメソッドを使う > 1ファイルのダウンロード¶
http://dl.dropboxusercontent.com/u/219436/node.js/handson/build/html/intro/async_io.html ということでサンプルをコピペしてまずは実行してみる

http.createClient is deprecated. Use `http.request` instead.

events.js:72
throw er; // Unhandled ‘error’ event
^
Error: getaddrinfo ENOTFOUND
at errnoException (dns.js:37:11)
at Object.onanswer [as oncomplete] (dns.js:124:16)

あれ?
http.createClient は廃止されるから http.request を使ってね!
だって。
あと getaddrinfo ENOTFOUND が出てる

でもhttp.createClient はportも指定できるっポイけど、
http.request でもできるのか?と思って調べたらできました。

ということでこの2行を
var client = http.createClient(u.port || 80, u.hostname);
var request = client.request(‘GET’,
u.pathname,
{
host: u.hostname
});

このように書き換えてみる
var options = {
host: u.hostname,
port: u.port || 80,
method: ‘GET’,
path: u.pathname
};

http.request(options, function (res) {
console.log(‘STATUS: ‘ + res.statusCode);
});

というかこのサンプルならhttp.getで十分な気もするけど。
request.on() の使い方を学習させるためだろうか。
でもそれなら
request.end() // リクエスト終了
のあとに
request.on() // リクエスト結果に対するコールバック設定
があるのが気になる・・・
request.on() を先に設定するべきでは。

次にgetaddrinfo ENOTFOUND だけど
これはLAN環境によっては外回線がbehaind proxyなので
requestをvia proxyにしてやらないと起きるエラー。

このように書き換えてみる
var proxy_url = xxx
var proxy_port = xxx
var options = {
host: proxy_url,
port: proxy_port,
method: ‘GET’,
path: u.pathname
headers: {
Host: u.hostname
}
};

はい、動いた

 - 未分類 ,