2012-01-16 116 views
6

我試圖讓板模板引擎與express.js一起工作。我最初的嘗試是這樣的:Express.js自定義模板引擎(板)

app.register('.html', { 
    compile: function (str, options) { 
     var template = new plate.Template(str); 
     return function(locals) { 
      return template.render(locals, function(err, data) { 
       return data; 
      }); 
     } 
    } 
}); 

我看到的問題是,template.render不返回任何內容(不確定),但數據傳遞給回調。我不確定如何使它在這種情況下工作,因爲Express期望編譯函數返回一個函數,該函數在調用時直接返回呈現的模板。

我在想也許我可以使用promise來解決這個問題,但由於express代碼並不期望返回promise,所以沒有成功。我不太在承諾速度,所以我可能只是做錯了:

app.register('.html', { 
    compile: function (str, options) { 
     var promise = new Promise(); 
     var template = new plate.Template(str); 
     return function(locals) { 
      template.render(locals, function(err, data) { 
       promise.resolve(data); 
      }); 
      return promise; 
     } 
    } 
}); 

這是一個自定義實現的例子,可以工作。所不同的是強調模板模板()函數直接返回字符串呈現像這樣:

app.register('.html', { 
    compile: function (str, options) { 
     var template = _.template(str); 
     return function (locals) { 
      return template(locals); 
     }; 
    } 
}); 

我真的很想用板的模板,因爲{%塊%}標籤是這樣真棒。任何幫助表示讚賞。

相關文件:

plate's github docs

express.js app.register docs

+0

板的創建者及時地添加了一個補丁到項目中,以使它與快速兼容,我問了這個。 [email protected]+有變化,你可以看到實現細節[這裏](https://github.com/chrisdickinson/plate/wiki/Getting-Started---In-Node) – joshontheweb

+1

你應該添加一個答案這個問題,然後接受它,如果這是真的! – tjarratt

回答

5

板的創建者及時添加補丁應用到項目中,使其與Express兼容我問這個了。 [email protected]+有變化,你可以看到實現細節here