Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在NodeJS应用程序中使用手柄时,将TypeError作为registerHelper不是一个函数_Javascript_Node.js_Express Handlebars_Registerhelper - Fatal编程技术网

Javascript 在NodeJS应用程序中使用手柄时,将TypeError作为registerHelper不是一个函数

Javascript 在NodeJS应用程序中使用手柄时,将TypeError作为registerHelper不是一个函数,javascript,node.js,express-handlebars,registerhelper,Javascript,Node.js,Express Handlebars,Registerhelper,我的NodeJS应用程序有下面的代码,我试图注册一个Handlebar if-else逻辑,以便在模板文件中使用它。但是,它将错误作为TypeError抛出:hbs.registerHelper不是一个函数。有谁能指出我犯的错误,并建议我如何注册if-elseif-else逻辑来执行相等或比较检查,从而在模板中构建决策逻辑 package.json中的express Handlebar版本是3.0.0 var exp = require('express'); var pth = require

我的NodeJS应用程序有下面的代码,我试图注册一个Handlebar if-else逻辑,以便在模板文件中使用它。但是,它将错误作为TypeError抛出:hbs.registerHelper不是一个函数。有谁能指出我犯的错误,并建议我如何注册if-elseif-else逻辑来执行相等或比较检查,从而在模板中构建决策逻辑

package.json中的express Handlebar版本是3.0.0

var exp = require('express');
var pth = require('path');
var fcon = require('serve-favicon');
var logger = require('morgan');
var cp = require('cookie-parser');
var bp = require('body-parser');
var exphbs = require('express-handlebars');

var index = require('./routes/index');

var app = express();

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

// view engine setup
app.engine('hbs', exphbs({extname: 'hbs', defaultLayout: 'layout', layoutsDir: __dirname + '/views/mylayouts/'}));
app.set('views', pth.join(__dirname, 'views'));
app.set('view engine', 'hbs');

助手只能注册为快速把手:

var hbs = exphbs.create({
    // Specify helpers which are only registered on this instance.
    helpers: {
        foo: function () { return 'FOO!'; },
        bar: function () { return 'BAR!'; }
    }
});
或者,如果您想动态注册它们。您可以像这样使用实例引用:

hbs.handlebars.registerHelper("superHelper", () => 42);
app.get('/', function (req, res, next) {
    res.render('home', {
        showTitle: true,

        // Override `foo` helper only for this rendering.
        helpers: {
            foo: function () { return 'foo.'; }
        }
    });
});
进一步移动,您可能希望在渲染级别覆盖辅助对象。您可以这样做:

hbs.handlebars.registerHelper("superHelper", () => 42);
app.get('/', function (req, res, next) {
    res.render('home', {
        showTitle: true,

        // Override `foo` helper only for this rendering.
        helpers: {
            foo: function () { return 'foo.'; }
        }
    });
});
资料来源:

编辑:

添加if帮助程序:


谢谢,如何使用上述语法来满足if-elseif-else逻辑的要求?一个语法示例会很有帮助。答案很有帮助。然而,最后一个问题是关于把手模板。如果我发送一个具有name属性的变量'p',那么在If函数中使用上述逻辑时,这种语法会起作用吗?{{if p.name==hello}},或者我需要为此更改帮助程序,或者需要编写另一个帮助程序来处理此问题?首先:如果应该内置帮助程序。要进行比较,您需要另一个助手-查看此项目,您可以使用或搜索示例:。是否有一个内置的比较部分?怎么可能呢?我正在使用的快速车把没有内置的if助手。如果我写了另一个帮助器来进行比较,那么定义其比较行为的if helper函数体有什么用呢?Idk您使用什么版本,但是我的express handlebars 3.0.0内置了if。要了解标准块辅助对象行为,请查看