使用hbs和获取“path.join的参数必须是string”的错误?

我想使用hbs和express来将一些模板应用到JSON数据(最终将从一个url获取数据)。 作为一个使用快递4的新手,我发现很多以前的post和解决scheme真的很混乱,因为一些function在快递4中被折旧。我组合了一些代码片段,得到了这样的结果:

var engines = require('consolidate'); var express = require('express'); var hbs = require('hbs'); app = express(); app.set('views', __dirname+ '/views'); app.set('view engine', 'hbs'); app.set("view options", { layout: true }); // ROUTES app.get('/', function (req, res){ var data = {"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ]} res.render('index', JSON.stringify(data)); }); app.listen(3000); 

我也试过在res.render中放一个简单的string,比如

  res.render('index', 'haha'); 

但它仍然不起作用。 任何见解请.. ..?

编辑:我的模板的目录是

  views - index.hbs 

而我其实只是放

  <hi> Hi </h1> 

在这个文件中。

render的第二个参数是一个对象,而不是一个string。 只是传递data

编辑:你也设置layout: true但你没有一个layout.hbs。 将其设置为false并且您的index.hbs应该呈现。

编辑2:完整的工作示例

index.js

 var engines = require('consolidate'); var express = require('express'); var hbs = require('hbs'); app = express(); app.set('views', __dirname + '/views'); app.set('view engine', 'hbs'); app.set("view options", { layout: false }); // ROUTES app.get('/', function (req, res){ var data = { "employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ] }; res.render('index', data); }); app.listen(3000); 

意见/ index.hbs

 {{#each employees}} Name: {{firstName}}<br> {{/each}}