2013-07-09 81 views
0

我試圖使用restler獲取網站的HTML。但是當我嘗試獲取結果的相關部分時,我總是得到錯誤,「TypeError:無法讀取未定義的屬性'rawEncoded'」。node js restler result嘗試返回結果時「get」未完成

'rawEncoded'有時是'res'。我認爲它會根據處理時間而改變。

我想從restler得到結果result.request.res.rawEncode。

我的功能:

var rest = require('restler'); 

var loadHtmlUrl = function(weburl) { 
    var resultstr = rest.get(weburl).on('complete', function(result) { 
     var string = result.request.res.rawEncode; 
     return string; 
    }); 
    return resultstr; 
}; 

然後:

var htmlstring = loadHtmlUrl('http://google.com'); 

也許restler是完全錯誤的路要走。也許我完全不瞭解它。但我絕對卡...

謝謝!

+0

你的代碼中有很多錯誤,請檢查它(例如,在第二段代碼中'var'後的等號) –

+0

對不起,修好了。被趕到寫它。謝謝! – rich

回答

3

請問你return resultstr;on('complete'回調函數被調用,因爲它是異步的,所以導致你的htmlstring被空不跑?我認爲你需要有一個回調函數作爲參數傳遞給你的loadHtmlUrl像這樣:

var rest = require('restler'); 

var loadHtmlUrl = function(weburl, callback) { 
    var resultstr = rest.get(weburl).on('complete', function(result) { 
     callback(result.request.res.rawEncode); 
    }); 
}; 

然後調用它像這樣:

var htmlstring = null; 
loadHtmlUrl('http://google.com', function(rawEncode) { 
    htmlstring = rawEncode; 
    //Do your stuff here... 
}); 

我認爲這將解決你會有未來的問題。但是,我認爲你面臨的真正問題是result.request不具有res的屬性。我在想,我上面的改變可能會解決這個問題(不太確定如何)。如果沒有,那麼我會建議看看result.request作爲調試啓動器有什麼樣的屬性......