2011-12-22 2 views
7

ExpressJS 응용 프로그램에서 동일한 응답 객체를 사용하여 렌더링을 여러 번해야하는 경우가 있습니다. (기본적으로 하나의 HTTP 요청은 여러 백엔드 요청을 트리거합니다. 모두 완료되면 결과를 즉시 페이지에 렌더링 할 수 있습니다.) 문제는 각각보기를 렌더링해야한다는 것입니다. 즉, 사용할 수 있다고 생각하지 않습니다. res.write()), 내가 알 수있는 한 res.render()은 응답을 끝내지 않거나 호출 할 때마다 헤더를 작성하지 못합니다.ExpressJS를 사용하여 동일한 응답 객체에 여러 번 렌더링하는 방법은 무엇입니까?

무엇이 누락 되었습니까?

+1

어떻게 단일 HTTP 요청에 두 번 응답 할 수 있습니까? –

+0

두 번 응답하지 않습니다. 여러 기능에서 페이지로 출력을 스트리밍 할 수 있기를 원합니다. HTTP 요청은 응답의 일부를 생성하는 다른 서비스에 대한 여러 API 호출을 발생시킵니다. 모든 사람들이 응답하고 페이지를 한 번에 렌더링 할 때까지 기다리는 대신 응답 객체를 "열린"상태로 유지하여 모든 API 호출이 완료 될 때까지보기 (더 정확하게보기 부분)를 작성할 수 있도록합니다. –

+0

아, 그러면 'res.write'가 유일한 옵션이 될 것입니다. 물론, 페이지의 일부분을'res.render'를 통해로드 한 다음 AJAX를 사용하여 나머지를로드하는 옵션도 있습니다. –

답변

8

익스프레스 등 EJS, 옥 같은 엔진을 사용하여 템플릿을 컴파일

데이터는 response.send 사용하여 렌더링됩니다 : 당신이 볼 수 있듯이, this.end...이 말에, https://github.com/visionmedia/express/blob/master/lib/response.js#L76-131

을하는 response.end (...)를 의미합니다.

여러 개의보기를 보내려면보기 엔진을 사용하여 해당보기를 직접 컴파일 한 다음 response.send와 비슷한 기능을 만들어야하지만 위의 링크를 보내지 마십시오. 헤더를 두 번 사용하거나 마지막 뷰가 렌더링되기 전에 response.end를 호출하십시오.

+3

기술적으로 가장 적합한 솔루션이기 때문에이 대답을 수락했습니다. 필자가 필자는 필자가 응답을 집계하기 위해 여러 번 호출하는 방식을 다시 디자인하고 더 나은 접근 방식 인 것처럼 보이기 때문에 한 번만 렌더링합니다. alessioalex의 지침은 이것에 접근하고자하는 모든 사람들을위한 자리지만, 코드에 대한 포인터는 시작해야하는 곳입니다. –

관련 문제