2014-07-15 67 views
0

我是nodejs的新手。我使用graphicsmagick在將圖像發送到瀏覽器之前調整其大小。 我的代碼看起來像這樣(RES是從功能發送的響應(REQ,RES){...}) -響應沒有結束,瀏覽器不斷加載 - nodejs和graphicsmagick

imageURLPromise 
.then(function(response) { 
    var body = response.body; 
    if (body) { 
    console.log("Found From: " + response.request.uri.href); 

    //set response headers here 
    setResponseData(res, response); 


    var buf = new Buffer(body, "binary"); 
    console.log(buf); 
    //gm module 
    gm(buf).resize(400,300).toBuffer(function(err,buffer) { 
     console.log("buffer here"); 
     res.end(buffer, "binary"); 
    }); 
    } 
}, function(error) { 
     console.log(error); 
}); 

我得到在瀏覽器中的圖像,我得到的日誌「緩衝這裏「但瀏覽器保持」加載「狀態。

我曾嘗試使用.stream()與gm和管道輸出到響應但它有同樣的問題。

如果我弄死克並直接寫入身體像這樣

res.end(body, 'binary'); 

的響應,那麼它工作正常。

有人可以告訴我在這裏做錯了嗎?

回答

2

我想出了問題。 問題不在於節點或gm,而在於HTTP響應頭。

當GM返回一個緩衝區並且我們將它寫入HTTP響應時,它將Transfer-Encoding標頭設置爲「chunked」。在這種情況下,內容長度標題不應該被設置。 你可以在這裏 http://en.wikipedia.org/wiki/Chunked_transfer_encoding

閱讀更多關於它,因爲我是同時設置瀏覽器一直在等待的圖像已被送往即使內容。

該代碼與我發佈的完全相同,除了setResponseData()函數(基本上用於設置標頭)的事實,我現在不設置內容長度標頭。