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