5

截至两天前,我对节点和车把还是个新手,所以请耐心等待。我正在尝试使用自定义车把助手,但不完全确定将其放在哪里。

我不断收到“TypeError:Handlebars.registerHelper 不是函数”

现在我在我的 server.js 文件中有它。不确定这是否正确。

var express  = require('express');
var app      = express();
var Handlebars  = require('express-handlebars');


app.engine('handlebars', Handlebars({
    defaultLayout: 'main'
}));

app.set('view engine', 'handlebars');

Handlebars.registerHelper("if", function(conditional, options) {
  if (options.hash.desired === options.hash.type) {
    options.fn(this);
  } else {
    options.inverse(this);
  }
});
4

5 回答 5

7

根据此处找到的文档,您似乎需要像这样使用它:https ://github.com/ericf/express-handlebars

var hbs = Handlebars.create({
  // Specify helpers which are only registered on this instance.
  helpers: {
    foo: function () { return 'FOO!'; },
    bar: function () { return 'BAR!'; }
  }
});
于 2015-11-29T03:46:37.793 回答
5

RA 卢卡斯是正确的。

您从中获得的对象require('express-handlebars')不是任何“普通的旧车把对象”。这是一个仅用于快速车把的不同对象

您所做的是将您的助手(以及其他设置)传递给.create()该对象的功能。

这是一个功能齐全的示例,我在 express-handlebars 中定义了 2 个助手

var express = require('express');
var exphbs = require('express-handlebars');
var app = express();

//Here you can pass helpers that you would normally define in registerHelpers
//and you can also define stuff like `defaultLayout` and `partialsDir`
var hbs = exphbs.create({
    helpers: {
        sayHello: function () { alert("Hello World") },
        getStringifiedJson: function (value) {
            return JSON.stringify(value);
        }
    },
    defaultLayout: 'main',
    partialsDir: ['views/partials/']
});
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
app.set('views', path.join(__dirname, 'views'));
于 2016-09-02T17:17:42.277 回答
3

刚遇到同样的问题。感谢 RLucas 和 Drkawashima,上面的答案是正确的,但这里有一个略短的选项。

var express = require('express');
var handlebars = require('express-handlebars');    
var app = express();

app.engine('handlebars', handlebars({
    helpers: {
        sayHello: function () { return "Hello"; },
        getStringifiedJson: function (value) {
            return JSON.stringify(value);
        }
    },
partialsDir: ['views/partials/'],
defaultLayout: 'main'
}));
app.set('view engine', 'handlebars');
于 2018-03-06T05:31:42.993 回答
0
const { engine } = require('express-handlebars');

app.engine('handlebars', engine({defaultLayout: 'main'}))

这对我有用。

于 2022-01-05T22:34:37.410 回答
-1
const { engine } = require('express-handlebars');
...
app.engine('hbs',engine({...

这适用于我的情况。

于 2022-01-01T18:39:34.117 回答