错误:缺少助手:" if_equal"车把

时间:2017-05-15 11:59:20

标签: javascript node.js express handlebars.js

我试图在我的快递节点应用程序上注册把手,但似乎它没有工作

Jim 
Jack 
Paul 
Rob
--------------
Smith
Jones
Aznar
Diaz

在.hbs文件中我运行此代码

const express = require('express');
const hbs = require('hbs');
const expressHbs = require('express-handlebars');

const app = express();
app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs' }));
app.set('view engine', 'hbs');

hbs.registerHelper('if_equal', function(a, b, opts) {
    if (a == b) {
        return opts.fn(this)
    } else {
        return opts.inverse(this)
    }
});

然后我收到了这个错误

  

错误:缺少助手:" if_equal"车把

1 个答案:

答案 0 :(得分:3)

问题在于您使用了两种不同的视图引擎。 express-handlebars& hbs

您正在使用.hbs呈现express-handlebars个文件,而您正在将帮助者注册到hbs

使用hbs

删除express-handlebars,然后删除此行:

app.engine('.hbs', expressHbs({ defaultLayout: 'layout', extname: '.hbs' }));

扩展名.hbs是hbs的默认值:

  

使用hbs作为默认视图引擎只需要一行代码   你的应用设置。这将在调用res.render时呈现.hbs文件。

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

hbs.registerHelper('if_equal', function(a, b, opts) {
    if (a == b) {
        return opts.fn(this)
    } else {
        return opts.inverse(this)
    }
});

使用快速把手

//remove require('hbs');
const expressHbs = require('express-handlebars');

const hbs = expressHbs.create({
    // Specify helpers which are only registered on this instance.
    helpers: {
        if_equal: function(a, b, opts) {
            if (a == b) {
                return opts.fn(this)
            } else {
                return opts.inverse(this)
            }
        }

    }
});

//The following example sets up an Express app to use 
//.hbs as the file extension for views:
app.engine('.hbs', expressHbs({extname: '.hbs'}));
app.set('view engine', '.hbs'); //with dot