使用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}}