Javascript TypeError:Handlebar.registerHelper不是函数

Javascript TypeError:Handlebar.registerHelper不是函数,javascript,node.js,handlebars.js,handlebarshelper,Javascript,Node.js,Handlebars.js,Handlebarshelper,我是全新的节点和把手两天前,所以请容忍我。 我试图使用自定义把手助手,但不完全确定它放在哪里 我不断听到“TypeError:Handlebar.registerHelper不是一个函数” 现在我的server.js文件中有它。不确定这是否正确 var express = require('express'); var app = express(); var Handlebars = require('express-handlebars'); app.engine('han

我是全新的节点和把手两天前,所以请容忍我。 我试图使用自定义把手助手,但不完全确定它放在哪里

我不断听到“TypeError:Handlebar.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);
  }
});

根据这里的文档,您似乎需要这样使用它:


R.A.卢卡斯是对的

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

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'));
您要做的是将助手(以及其他设置)传递给该对象的
.create()
函数

下面是一个功能完整的示例,我在express Handlebar中定义了两个助手

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'));

只是遇到了同样的问题。感谢R.A.Lucas和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');