2012-04-25 3 views
0

예 : 다음과 같은 시나리오 : 그들은 단순히 그들이 우리를 넣어 원하는 장소에서node.js 용 Javascript 방출 템플릿 엔진?

<script language="Javascript" src="https://our.server/customer-name/entry-point.js"/> 

를 작성하여 자신의 페이지에 우리의 제품을 포함 할 수 있는지, 그래서 우리는 우리의 고객에게 (https://our.server/customer-name/entry-point.js 같은 것을) 몇 가지 진입 점 URL을 제공 제품 (예, 알겠습니다. 이것은 추한 솔루션이지만 변경할 수있는 것이 아닙니다.)

그래서 여기에서 우리는 문제를 직면하게됩니다. 우리의 entry-point.js은 (https://our.server/customer-name/) 다른 파일을로드해야한다는 것을 어떻게 든 알아야합니다. 그래서 대답은 동적으로 entry-point.js을 생성하여 동적으로 생성하는 것입니다.

당신이 볼 수 있듯이
res.write("var ourprefix_basepath = \"" + basepath.escape() + "\";"); 
res.write("function ourprefix_entryPoint() { /*do something*/ }"); 
res.write("ourprefix_entryPoint();"); 

, 그냥 너무 나쁜 :

var ourcompany_ourproduct_basepath = "https://our.server/customer-name/"; 

이 작업을 수행 할 수있는 확실한 방법은 수동으로 이런 일을 entry-point.js를 구성하는 것입니다.

예를 들어 다음을 허용하는 템플릿 엔진이 있습니까? 다음에 :

var ourprefix_basepath = "https://our.server/customer-name/"; 
function ourprefix_entrypoint() { /* do something */ }; 
ourprefix_entrypoint(); 

다음 응답 스트림에 다음과 같은 기록합니다

var basepath = "https://our.server/customer-name/"; 
var export = { 
    ourprefix_basepath: basepath.escape(), 
    ourprefix_entrypoint: function() { /* do something */ } 
}; 
templateEngine.render(export); 

또는

view.vw: 
    ourprefix_basepath = rewrite("{#basepath}"); 
    function ourprefix_entrypoint() { /* do something */ 
    ourprefix_entrypoint(); 

App.js: 
    templateEngine.render("view.vw", { basepath: "https://our.server/customer-name/" }); 

또는 같은 것을 (당신이 생각이있어)?

답변

0

Node.js가 리플렉션을 지원하는 것처럼 보이지만 명시 적으로 어딘가에 명시되어 있는지 찾을 수는 없습니다.

그래서, 사실을 이용하여 JSON는 JS의 서브 세트이고, 템플릿 엔진을 사용하지 않고 다음 청소기 코드 수 :

var entrypoint = function(data) { 
    /* do something with data.basepath and data.otherparam here... */ 
} 

exports.processRequest = function(request, response) { 
    var data = { 
     basepath: computeBasepath(request), 
     otherparam: "somevalue" 
    }; 
    response.send("(" + entrypoint.toString() + ")(" + JSON.stringify(data) + ")"); 
}