2012-09-08 66 views
2

我使用mikeal的Request模塊從REST服務器獲取圖像,然後嘗試使用強大的方式解析多部分響應,但form.parse永遠不會被調用。我做錯了什麼?用Node.js中的Request/Formidable解析多部分響應

request.get({url: "http://ur-to-get", headers: headers, qs: query}, function(err, res, body) { 
    var form = new formidable.IncomingForm(); 
    form.parse(res, function(err, fields, files) { 
     console.log(util.inspect({fields: fields, files: files}));  
    }); 
}); 

和頭的樣子:

transfer-encoding': 'chunked', 
'content-type': 'multipart/parallel; 
boundary=yz2C9C5D87FD6148a3986510BCACF917A82C9C5D87FD6148a3986510BCACF917A8ZY' }, 

回答

2

厲害的parse希望能夠監視你已經通過了res參數data事件,而是因爲你正在使用request有一個回調,您創建強大的回調將不會運行,直到所有數據被髮射並收集完畢。這就是請求能夠將body參數傳遞給回調的方式。

請求模塊有一個可用於數據的流,但它不會像Formidable想要的那樣暴露響應頭,所以我不認爲有一個簡單的方法來使用它。

由於你只是做GET請求,我建議只使用節點的默認請求邏輯,而不是request模塊,雖然參數有點複雜。

http.get({ 
    host:'google.com', 
    headers: headers, 
    path: '/?' + querystring.stringify(qs) 
}, function(res){ 
    var form = new formidable.IncomingForm(); 
    form.parse(res, function(err, fields, files) { 
    console.log(util.inspect({fields: fields, files: files}));  
    }); 
}); 
+0

這很有道理。我沒有想到使用流。我試過了,但它給了我以下錯誤:「壞的內容類型的標題,沒有內容類型」 – jabbermonkey

+0

我誤讀了你對標題的評論。爲什麼您要在GET請求上發送標題和傳輸編碼?如果您要發送數據,您只需要這些。根據錯誤,它看起來像來自'GET'數據的服務不會在響應頭中設置內容類型。要麼你要求一個錯誤的網址,要麼REST服務沒有完成它的工作。 – loganfsmyth

+0

這是我試圖解析的響應頭。它返回jpeg圖像。當我檢索一個它將類型設置爲image/jpeg,並且當我請求多個時,它將類型設置爲multipart/parallel。 – jabbermonkey