我在使用helps时在网上看了很多文章,有99%的都说helps在express-handlebars是这样使用的:
var express = require('express');
// 引入express-handlebars
var exphbs = require("express-handlebars")
app = express();
// 设置模板存放路径
app.set("views", __dirname+ "/views")
var hbs = exphbs.create({
partialsDir:'/views/partials',
helpers: {
foo: function () { return 'FOO!'; },
bar: function () { return 'BAR!'; }
}
});
// Register `hbs.engine` with the Express app.
app.engine('.hbs', exphbs({
extname: '.hbs'
}));
app.set('view engine', '.hbs');
app.use(express.static(__dirname + '/public'));
但是我这样运行项目时一直是报错,说找不到helpers,我明明已经注册了呀。后来我有找到了1%的文章,文章上说我们可以这样注册:
app.engine('.hbs', exphbs({
extname: '.hbs',
helpers: {
foo: function () { return 'FOO!'; },
bar: function () { return 'BAR!'; }
}
}));
这样试过之后,果然不报错了,我很感谢这最后一篇文章的指导。如果有小伙伴遇到类似的错误,可以这样试试哦。另外,如果我们安装的是handlebars而不是express-handlebars,我们入口文件app.js应该是这样注册partials和helpers的:
var express = require('express');
var app = express();
var helpers = require('./server/helpers');
var hbs = require('hbs');
hbs.registerPartials(__dirname + '/server/views/partials');
for (var key in helpers) {
if (helpers.hasOwnProperty(key)) {
hbs.registerHelper(key, helpers[key]);
}
}
app.enable('trust proxy');
app.set('views', path.join(__dirname, 'server', 'views'));
app.set('view engine', 'hbs');hbs.registerPartials(__dirname + '/server/views/partials');
for (var key in helpers) {
if (helpers.hasOwnProperty(key)) {
hbs.registerHelper(key, helpers[key]);
}
}
app.enable('trust proxy');
app.set('views', path.join(__dirname, 'server', 'views'));
app.set('view engine', 'hbs');
可以用hbs.registerPartials和hbs.registerHelper来注册使用,但是在express-handlebars这种方式并不生效。