2014-10-08 1 views
1

정적 HTML 페이지가 새로운 정적 HTML 페이지로 변환되어야하는 프로젝트에서 작업하고 있습니다. Cheerio로 페이지를 긁어내어 페이지 간 관계를 JSON으로 저장했습니다.Node.js + 정적 HTML을 사전 처리하기위한 콧수염

도전 과제는 모든 것을 상호 연결하는 목차가있는 정적 HTML 페이지를 만드는 것입니다.

콧수염 템플릿 :

<h1>Table of Contents</h1> 
{{#toc}} 
    <h2>{{moduleName}}</h2> 
    <ul class='module'> 
     {{#page}} 
      <li><a href='{{url}}'>{{title}}</a></li> 
     {{/page}} 
    </ul> 
{{/toc}} 

데이터 :

{ 
    "toc": [{ 
     "moduleName": "Getting Started", 
     "page": [{ 
      "title": "Welcome", 
      "url": "L0-01_Welcome.html" 
     }, { 
      "title": "Who Should Read This?", 
      "url": "L0-02_WhoFor.html" 
     }] 
    }, { 
     "moduleName": "Module 1", 
     "page": [{ 
      "title": "Definitions", 
      "url": "L1-01_Definitions.html" 
     }] 
    }] 
} 

노드 설치 :

var Mustache = require("mustache"); 
var fs = require("fs"); 
var cheerio = require("cheerio"); 

// File Paths 
var pathToMustache = "./templates/toc.mustache"; 
var pathToJSON = "./menu/data.json"; 

// Generate HTML menu 
//var htmlMenu = Mustache.render(fs.readFileSync(pathToMustache).toString(), fs.readFileSync(pathToJSON)); 
var htmlMenu = Mustache.to_html(fs.readFileSync(pathToMustache).toString(), fs.readFileSync(pathToJSON)); 
console.log(htmlMenu); 

// Then loop through the html files appending the new menu using Cheerio... 

이 성공적으로 <h1>Table of Contents</h1>,하지만 아무것도를 추가 않습니다. 나는이 사실을 이해할 수 없기 때문에 아주 명백한 것을 놓치고 있어야합니다.

저는 콧수염뿐 아니라 일반적으로 프로그래밍에 익숙하지 않으므로 조언을 주시면 대단히 감사하겠습니다.

답변

1

파일에서 텍스트 문자열로 JSON을 읽고이를 Mustache.render를 호출하기 전에 개체로 변환해야합니다.

사용 JSON.parse :

'use strict'; 

var Mustache = require("mustache"); 
var fs = require("fs"); 

var page = fs.readFileSync("page.mustache").toString(); 
var data = JSON.parse(fs.readFileSync("data.json").toString()); 

var h = Mustache.render(page, data); 

console.log(h); 

출력 :

<h1>Table of Contents</h1> 
    <h2>Getting Started</h2> 
    <ul class='module'> 
      <li><a href='L0-01_Welcome.html'>Welcome</a></li> 
      <li><a href='L0-02_WhoFor.html'>Who Should Read This?</a></li> 
    </ul> 
    <h2>Module 1</h2> 
    <ul class='module'> 
      <li><a href='L1-01_Definitions.html'>Definitions</a></li> 
    </ul> 

자바 스크립트에서, 기본적으로 두 가지 기능이 있습니다 : JSON.parseJSON.stringify.

JSON.parse은 - JSON 표기법에 값을 변환 - 지정된 JSON 텍스트

JSON.stringify에 개체를 반환합니다.

+0

정말 고마워요! 그것은 트릭을했다!! 그래서 실수가 아니라면 JSON 데이터는 다음 세 가지 상태로 존재합니다 : 1) ??? 2) 문자열 3) 객체 – MCTaylor17

+0

JSON은 데이터 교환 형식입니다. 기본적으로 주어진 JSON 텍스트에 객체를 반환하는 JSON.parse와 값을 JSON으로 변환하는 JSON.stringify라는 두 가지 기능이 있습니다. –

+0

아마도 이것은 Node fs 모듈에 대한 전반적인 이해가 붕괴 된 것일 수 있습니다. 제 질문은 데이터가 어떤 형태로'fs.readFile ("data.json")'로 존재한다는 사실에 중점을두고 있습니다. – MCTaylor17

관련 문제