fs.readFile 的替代方法,用于在 Express 中使用 res.json 时加载车把模板

Alternative to fs.readFile to load Handlebars template when using res.json in Express

本文关键字:json res 加载 readFile 方法 Express 用于 fs      更新时间:2023-09-26

我的目标是在我正在构建的Express 4应用程序中提供一个简单的实时api端点(使用res.json()),该应用程序将Handlebars模板与数据一起编译并返回一个字符串,然后替换HTML客户端。

遇到的问题是,当我更喜欢使用与用于显示常规视图的机制相同的机制时,目前我必须使用 fs.readFile() 来读取模板的 Handlebars 内容。这可能吗?

这是一个基本示例;

数据终结点 (JSON):

{
  "title": "Page Title"
}

模板.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);
});

我甚至可能没有必要担心这一点,因为也许这就是 Handlebars 在引擎盖下所做的一切,但我只是想知道是否有我不知道的更简单的方法。

我建议你使用express-handlebars来使用Handlebars作为你的渲染引擎。只需这样做:

const expressHandlebars = require('express-handlebars');
...
app.engine('handlebars', expressHandlebars({/* config */}));
app.set('view engine', 'handlebars');

现在,您的模板将使用车把进行渲染,假设您已为应用传递正确的配置选项。现在你可以只使用普通的 Express API,如下所示:

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