勉強始めました
日本にいる時からJavaScriptを勉強していたのですが、バタバタしてたのでやめてました。
で、1週間ほどまとめて時間が取れそうなので、node.jsハンズオンでちょっとお勉強。
インストールは終わってるので、まずは1ファイルのダウンロードというのを作っていきます。
var util = require('util'), url = require('url'), http = require('http'); function download(urlStr){ var u = url.parse(urlStr), client = http.createClient(u.port || 80, u.hostname), request = client.request('GET', u.pathname, { host: u.hostname} ); request.end(); request.on('response', function(response){ console.log(response.statusCode); for(var i in response.headers){ console.log("%s : %s", i, response.headers[i]); } console.log(''); response.setEncoding('utf8'); response.on('data', function(chunk){ util.print(chunk); }); response.on('end', function(){ console.log(''); }); }); } download(process.argv[2]);
これを実行すると、以下のようにエラーが出てきました。
http.createClient is deprecated. Use `http.request` instead.
どうやらバージョンが変わってdeprecatedになったようです。
Node.jsのAPIを読むと
This function is deprecated; please use http.request() instead. Constructs a new HTTP client. port and host refer to the server to be connected to.
ということで、組み直したのがこちら。
var util = require('util'), url = require('url'), http = require('http'); function download(urlStr){ var u = url.parse(urlStr), options = { host: u.hostname, port: u.port || 80, path: u.path, method: 'GET' }; var request = http.request(options, function(response){ console.log(response.statusCode); for(var i in response.headers){ console.log("%s : %s", i, response.headers[i]); } console.log(''); response.setEncoding('utf8'); response.on('data', function(chunk){ util.print(chunk); }); response.on('end', function(){ console.log(''); }); }); // error handler request.on('error', function(e){ console.log('problem with request '+ e.message); }); request.end(); } download(process.argv[2]);
まぁ、この実装ならば、http.getを使ったほうがいいですね。ドキュメントにrequest.end()処理が自動的に呼ばれると書いてあるので、こっちのほうが便利。