2016-02-22 55 views
0

我的目標是在我正在構建的Express 4應用程序中提供一個簡單的活動api端點(使用res.json()),該應用程序將Handlebars模板與數據和返回一個字符串,然後替換HTML客戶端。替代fs.readFile在Express中使用res.json時加載Handlebars模板

我遇到的問題是,當我傾向於使用與用於顯示常規視圖相同的機制時,目前我不得不使用fs.readFile()來讀取模板的Handlebars內容。這可能以某種方式嗎?

下面是一個基本的例子;

數據端點(JSON):

{ 
    "title": "Page Title" 
} 

template.hbs

<h1>{{ title }}</h1> 

現場端點(JSON)我的路由響應中

{ 
    "tpl": "<h1>Page Title</h1> 
} 

功能

var api = {}; 

fs.readFile('template.hbs', 'utf8', function(err, tpl) { 

    var template = hbs.compile(tpl); 

    // data here is the value returned from the data endpoint above 
    api.tpl = template(data); 

    res.json(api); 

}); 

我甚至可能不需要擔心這個,因爲也許這是所有車把手在引擎蓋下做的,但我只是想知道是否有一個我不知道的簡單方法。

回答

1

我建議你使用express-handlebars來使用Handlebars作爲你的渲染引擎。只是這樣做:

const expressHandlebars = require('express-handlebars'); 

... 

app.engine('handlebars', expressHandlebars({/* config */})); 
app.set('view engine', 'handlebars'); 

現在你的模板將呈現使用車把,假設你已經在你的應用程序的權利config options通過。現在您可以使用普通的Express API,如下所示:

... 

res.render('template', data, (err, html) => { 
    api.tpl = html; 
    res.json(api); 
}); 
相關問題