2012-03-28 76 views
0

我想使返回網頁內容的功能,這是我迄今爲止Node.js的http.get作爲函數

var get_contents = function() { 
    var httpRequestParams = 
    { 
     host: "google.com", 
     port: 80, 
     path: "/?" 
    }; 

    var req = http.get(httpRequestParams, function(res) 
    { 
     var data = ''; 
     res.on('data', function(chunk) { 
      data += chunk.toString(); 
     }); 
     //console.log(data); 
    }).end(); 

    return req; 
} 

這當我運行此代碼,我看控制檯日誌記錄打開時的html內容,但當我嘗試返回輸出時,它只是無法工作。

我想不出有什麼辦法可以在任何地方返回get_contents()。在控制檯上,它只是沒有迴應。

感謝

回答

5

類似的東西:(不要忘記處理錯誤和超時)

var on_contents = function(cb) { 
    var httpRequestParams = 
    { 
     host: "google.com", 
     port: 80, 
     path: "/?" 
    }; 

    var req = http.get(httpRequestParams, function(res) 
    { 
     var data = ''; 
     res.on('data', function(chunk) { 
      data += chunk.toString(); 
     }); 

     res.on('end', function(){ 
      cb(data); 
     }); 

     //console.log(data); 
    }).end(); 

} 

function onFinish(data) { 
    console.log(data); 

} 

on_contents(onFinish) 
+0

不工作被發現。將數據打印到控制檯,但不會將其傳遞給控制檯。 – Kartik 2012-03-28 07:46:03

+1

node.js是異步的。您必須使用事件或回調來獲取您的功能的結果。 – Vodun 2012-03-28 08:07:53

+0

@Vodun的+1。節點使用回調函數,而不是返回。請參閱[本視頻](http://www.youtube.com/watch?v=jo_B4LTHi3I),以便充分掌握節點與某些傳統語言之間的基本差異。 – 2012-03-28 15:16:53

2

簡短的回答是:你不能從該函數返回的數據。 http.get是異步的,所以它不會在你的函數結束之前開始運行回調。您需要讓get_contents函數本身進行回調,請檢查http.get處理程序是否已完成加載,如果是,請調用get_contents回調。

+0

任何你可以提供一些代碼的方式? – Kartik 2012-03-28 08:02:58

+1

@Kartik:這實際上是Vodun的答案。顯然他在編寫代碼時描述了它的功能。 – Chuck 2012-03-28 16:59:17

1

在node.js中有一個很棒的模塊[request][1]

var request = require('request'), 
    url = require('url'); 

var server = http.createServer(function (request, response) { 
    getPage("http://isohunt.com/torrents/?iht=-1&ihq=life+is+beautiful", function (body) { 

     console.log(body);   
    }) 
}); 
server.listen(3000); 

更多信息,請http://www.catonmat.net/blog/nodejs-modules-request/