javascript - 错误 : Missing helper: "if_equal" handlebars

标签 javascript node.js express handlebars.js

我尝试在我的 express node 应用程序上注册 handlebar,但它似乎不起作用

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

在 .hbs 文件中我运行这段代码

 {{#if_equal x "my_string"}}
       x is "my_string"
  {{else}}
       x isn't "my_string"
  {{/if_equal}}

然后我收到这个错误

Error: Missing helper: "if_equal" handlebars

最佳答案

问题是您使用了两个不同的 View 引擎。 express-handlebars & hbs .

当您将助手注册到 hbs 时,您的 .hbs 文件正在使用 express-handlebars 呈现。

使用 hbs

放下 express-handlebars,然后放下这一行:

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

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

Using hbs as the default view engine requires just one line of code in your app setup. This will render .hbs files when res.render is called.

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

使用快速 Handlebars

//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

关于javascript - 错误 : Missing helper: "if_equal" handlebars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978972/

相关文章:

javascript - 动态创建的输入类型=文件在 PHP 中不起作用?

javascript - 如何从异步调用返回响应?

javascript - 如何在html中打印ajax、jquery、javascript中的数据?

node.js - Angular 2 RC 使用 Express 服务器而不是 Lite 服务器

javascript - ejs获取嵌套对象

javascript - setState 之后组件不会重新渲染

node.js - 在 express 中获取 rawBody

node.js - 如何为 lambda 服务配置 X-Ray

javascript - Node Express 应用程序调用 mssql 表示连接已关闭

javascript - 使用node和javascript将数据发送到服务器