2014-04-19 4 views
0

NodeJS에 몽구스가 결합되었습니다. 뷰에 여러 컬렉션을 한 번에 렌더링하려면 어떻게해야합니까?NodeJS : 렌더링 할 데이터를 여러 컬렉션에서 가져옵니다.

Page.find().sort({ 'order': 1 }).exec(function(err, pages) { 
    Portfolio.find().sort({ 'order': 1 }).exec(function(err, portfolios) { 
     res.render('layout', { 
      title: 'Index', 
      pages: pages, 
      portfolio: portfolios 
     }); 

     ... 

그러나 그것은 또한 내가 렌더링 것 두 개 이상의 컬렉션이 있다면 꽤 가파른 렌더링 내 만들 것 :

은 내가 이런 식으로 뭔가를 할 수 알고있다. 내가 할 수있는 다른 방법이 있습니까?

결국 내 렌더링을 구문 분석하기 전에 Page.find() 및 Portolio.find()를 저장 하시겠습니까? 사전에

감사

답변

0

(그에 앞서이 :. 나 자신이 질문에 긴, 아주 looooong 답을 작성 잃고 내가 여기에 필수 요소를 요약하려고 블로그 포스트로 나중에 다시 재 작성하기로 결정했습니다.)

비동기 이벤트 구동 프로그래밍을 처리 할 때 많은 동기를 유발하고보다 동기적이고 긴급한 배경에서 오는 문제는 많은 사람들이 겪고있는 문제입니다. 'callback hell'이라고도합니다.

큰 그림을 얻으려면 무엇이 성취 될 것인지, 어떤 기법과 패턴이 관련되는지, nodeJS와 같은 비동기 실행 환경을 프로그래밍하는 것이 무엇을 의미하는지에 대해 면밀히 살펴야하기 때문에 짧은 대답은 없습니다.

나는 몇 가지 질문에 침착하게하려고합니다 :

Q가 : Pages에 어떤 방법으로 Portfolios을 따라 달라?

그렇다면 유연한 의존성이나 MongoDB와 같은 NoSQL 데이터베이스에서 모델링하는 것이 좋지 않습니까? 그러면 데이터가 콜렉션을 통해 액세스 할 수 있습니다.

: 고전적인 "부풀린"뷰 방식을 선택해야 할 필요가 있습니까? 요청을 Portfolios으로부터 Pages으로 분리 할 수 ​​있습니까?

예인 경우 경로를 분할하고 부분보기의 편의 제공을 선택하십시오. (물론 JSON 데이터를 전선으로 보내고 클라이언트 측 렌더링을하면 더 좋고 깨끗해진다.) 그러나 여기서는 멈출 것이다.)

Q : 처음 두 가지 질문이 있습니까? 코드 스 니펫에 표시된 것과 같이 독립적 인 데이터 부분이 필요하기 때문에 불필요합니다. 이것은 분명히 한 응답에서 렌더링 된 뷰로 전달되는 데이터 부분의 최상위 구성입니까?

예인 경우, 짝수 위주의 사고 방식으로 전환하고 예를 들어 다음을 활용하여 "종속성 체인"을 사용하여 데이터 구성을 표현합니다. Promises을 구현하는 라이브러리 이렇게하면 비동기 처리의 장점을 유지하면서 후속 조치에 필수적인 결과를 수집하는 데 도움이 될 수 있습니다. Also have a look on this stackoverflow question.

내 블로그 항목이 도착하면 바로 여기에 다른 의견을 게시 할 것입니다. 그럼에도 불구하고 : 저는 제 대답이 당신을 조금 도울 수 있기를 바랍니다.

관련 문제