2014-03-13 4 views
1

여기에 질문을 복제하지 않으려 고하지만이 특정 문제를 해결 한 내용이 보이지 않았습니다.Node.js 및 Express - 전화 한 번으로 디렉토리의 렌더링 페이지에 대해

나는 독특한 콘텐츠 나는 폴더에 저장 블록의 무리 작성하여 일부 페이지를 구성하고있어 -이 같은 것들을 :

h4 Content Example 
p.description. 
    Lorem ipsum dolor sample text etc etc 

pages\contentBlocks\Example\contentExample.jade, 말에. 이 같은

mixin contentBlock(title) 
    .content-block(id=title.toLowerCase()) 
     h3 #{title} 
     if block 
      .content 
       block 

나는 더 큰 페이지 (pages\portfolio.jade) 내에서이 믹스 인을 호출 :

이 내용 블록

이처럼 보이는 믹스 인 ( pages\mixins.jade)에 추가됩니다

.subsection 
    //- Expects a list of objects of the format { title, html } 
    each val in pageBlocks 
     +contentBlock(val.title) 
      != val.html 

(배경 이미지와 같이 현재 위치에서 서식을 지정하기 위해 mixin으로 전달할 수있는 다른 변수를 사용하여 나중에이를 향상시키는 것입니다.

Express의 기능을 사용하여 한 번의 호출로 디렉토리의 모든 페이지를 자동으로 렌더링하고 싶습니다. (index.js)과 같이 :. 그러나

var pageBlocks = []; 
res.render('pages/contentBlocks/Example/*', function (err, html) { 
    if (err) throw err; 
    pageBlocks.push({ html: html }); 
}); 

, 나는 또한 내가에 넣어 블록의 class를 설정하는 예를 들어, 파일의 제목을 참조 할 수 있도록하고 싶습니다 이상적으로, 그것은 것 다음과 같이 표시하십시오.

res.render('pages/contentBlocks/Example/*', function (err, html) { 
    if (err) throw err; 
    pageBlocks.push({ title:functionToGetFileName(), html: html }); 
}); 

수동으로 해당 디렉토리의 파일을 반복하지 않고 수행 할 수있는 방법이 있습니까?

또는이 방법은 불필요하게 복잡하게 보입니다 (mixins, includes, extends 및 partials가있을 경우 추가 렌더링 호출없이이 작업을 수행 할 수 있어야한다는 느낌이 들었습니다). 이?


편집 : 주변을 둘러보고 코드 테스트를 한 결과 이제는 확신이 없습니다. Express는 암시 적으로 디렉토리의 모든 파일을 렌더링합니까? this question을 기반으로 할 수 있다고 생각했지만 잘못 읽었을 수 있습니다. res.render('path/to/directory/', callback)의 형식이 작동하지 않는 것 - 나는 다음과 같은 오류 얻을 : 나는 다음과 같은 패턴을 사용하고 임시 해결책에 대한

Error: Failed to lookup view "path/to/directory/" in views directory "/path/to/app/views" 

답변

0

:

exampleBlocks = []; 
eb_dir = "pages/contentBlocks/Example"; 
fs.readdirSync("./views/" + eb_dir).forEach(function(file) { 
    res.render(eb_dir + "/" + file, function (err, html) { 
     if (err) throw err; 
     exampleBlocks.push({title: file, html:html}) 
    }); 
}); 

만큼 간결 내 취향, res.render() 많은 시간 내 jimmies을 부스러기 전화해도. 차라리 단일 배치 렌더링, 또는 더 나은 아직, 옥 구조의 영리한 사용을 통해 해결 -하지만 난 여전히 후자를 할 방법을 생각하지 않았습니다.


편집 : 나는 단순히 폴더에있는 파일을 열거하지 않는 게 좋을 결정

- 나는 순서를보다 강하게 제어하려면.대신 내 페이지에 each 루프를 사용하여, 나는 단순히 (내 앞의 예에서 pages\portfolio.jade을)이 같은 include D의 콘텐츠와 믹스 인을 호출하려고 해요 :

.subsection 
    +contentBlock("Block 1") 
      include blocks/block1 
    +contentBlock("Block 2") 
      include blocks/block2 

내가 그러나, 여기에 질문을 남겨 둘 것이다, 다른 사람들도 비슷한 문제를 겪을 수 있습니다.