編寫一個程序來發(fā)起一個 HTTP GET 請求,所請求的 URL 為命令行參數(shù)的第一個。然后將每一個 “data” 事件所得的數(shù)據(jù),以字符串形式在終端(標準輸出 stdout)的新的一行打印出來。
完成這個練習,需要使用 Node.js 核心模塊之一:http。
http.get()
?方法是用來發(fā)起簡單的 GET 請求的快捷方式,使用這個方法可以一定程度簡化程序。http.get()
的第一個參數(shù)是GET 的URL,第二個參數(shù)則是回調函數(shù)。
與其他的回調函數(shù)不同,這個回調函數(shù)有如下這些特征:
function callback (response) { /* ... */ }
response 對象是一個 Node 的 Stream 類型的對象,可以將 Node Stream當做一個會觸發(fā)一些事件的對象,其中我們通常所需要關心的事件有三個: “data”,”error” 以及 “en”??梢韵襁@樣來監(jiān)聽一個事件:
response.on("data", function (data) { /* ... */ })
‘data’ 事件會在每個數(shù)據(jù)塊到達并已經(jīng)可以對其進行一些處理的時候被觸發(fā)。數(shù)據(jù)塊的大小將取決于數(shù)據(jù)源。
從?http.get()
?所獲得的 response 對象/Stream 還有一個 setEncoding() 的方法。如果調用這個方法,并為其指定參數(shù)為 utf8,那么 data 事件中會傳遞字符串,而不是標準的 Node Buffer 對象,這樣,也不用再手動將 Buffer 對象轉換成字符串了。
var http = require('http');
http.get(process.argv[2], function (response) {
response.setEncoding('utf8');
response.on('data', console.log);
response.on('error', console.error);
});
更多建議: