web前端

handlebar helpers is not a model

2018-07-15  本文已影响45人  风逍梦遥

我在使用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这种方式并不生效。

上一篇 下一篇

猜你喜欢

热点阅读