2014-07-15 2 views
0

저는 nodejs를 처음 사용합니다. 나는 브라우저에 보내기 전에 이미지의 크기를 바꾸기 위해 graphicsmagick을 사용하고있다. 이 같은 내 코드가 보인다 (입술 응답이 함수에서 전송하는 것입니다 (REQ, 고해상도) {...}) -응답이 끝나지 않고 브라우저가 계속로드됩니다. - 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); 
}); 

내가 브라우저에서 이미지를 얻을, 나는 로그를 얻을 "여기 버퍼 "브라우저는"로드 중 "상태로 유지됩니다.

gm을 사용하여 .stream()을 사용해 보았지만 응답에 stdout을 파이프했지만 동일한 문제가 있습니다. 난 도망 GM과 직접 수행이

res.end(body, 'binary'); 

같은 응답에 몸을 작성하는 경우

는 다음 올바르게 작동합니다.

누군가 내가 여기서 잘못하고 있다고 말할 수 있습니까?

답변

2

문제를 발견했습니다. 노드 또는 gm과 관련된 문제가 아니지만 HTTP 응답 헤더가 있습니다.

GM이 버퍼를 반환하고이를 HTTP 응답에 쓰면 Transfer-Encoding 헤더가 "chunked"로 설정됩니다. 이 경우 Content-Length 헤더를 절대로 설정해서는 안됩니다. 자세한 내용은 여기를 참조하십시오. http://en.wikipedia.org/wiki/Chunked_transfer_encoding

이미지를 전송 한 후에도 브라우저가 콘텐츠를 기다리는 중 설정했기 때문에.

코드는 setResponseData() 함수 (기본적으로 머리글을 설정하는 데 사용)에서 지금 내용 길이 머리글을 설정하지 않는다는 점을 제외하면 내가 게시 한 코드와 완전히 동일합니다.