2012-04-25 2 views
0

Рассмотрите, например, следующий сценарий: мы дадим некоторую точку входа URL (что-то вроде https://our.server/customer-name/entry-point.js) для наших клиентов, так что они в состоянии включить наш продукт на своей странице, просто писатьJavascript-испускающий шаблон движка для node.js?

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

в том месте, они хотят, чтобы положить наши продукт (да, я знаю, это уродливое решение, но это не то, что я мог бы изменить).

Итак, мы сталкиваемся с проблемой: наш entry-point.js должен как-то узнать, откуда (https://our.server/customer-name/) он должен загрузить другие файлы. Таким образом, кажется, что ответ заключается в том, чтобы генерировать entry-point.js динамически, чтобы он содержал, например,

var ourcompany_ourproduct_basepath = "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 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/" }); 

или что-то вроде этого (у вас есть идея), которая будет записывать следующее в поток ответа:

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

?

ответ

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) + ")"); 
} 
Смежные вопросы