类型错误:exphbs 不是函数

Adi*_*i24 30 javascript node.js express express-handlebars

我正在尝试使用 Express-handlebars 模块,但出现错误。我的代码:

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

app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
app.set('view engine', '.hbs');
Run Code Online (Sandbox Code Playgroud)

我的错误:

"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
                   ^

TypeError: exphbs is not a function"
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚为什么它不能正常工作。有任何想法吗?

小智 58

您应该使用“exphbs.engine”而不是“exphbs”。

app.engine('.hbs', exphbs.engine({ extname: '.hbs', defaultLayout: "main"}));
Run Code Online (Sandbox Code Playgroud)

  • 这样可行。我想知道你是怎么知道的? (2认同)

Ars*_*mad 18

您有两种选择来解决此问题

第一种方法-

在这里你只需要更新一个单词.enigne

改变这个:

 app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
Run Code Online (Sandbox Code Playgroud)

app.engine('.hbs', exphbs.engine({ extname: '.hbs', defaultLayout: "main"}));
Run Code Online (Sandbox Code Playgroud)

第二种方法-

在此,您必须更新

var exphbs = require('express-handlebars'); 
Run Code Online (Sandbox Code Playgroud)

 const { engine } = require('express-handlebars');
Run Code Online (Sandbox Code Playgroud)

app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
Run Code Online (Sandbox Code Playgroud)

app.engine('handlebars', engine({ extname: '.hbs', defaultLayout: "main"}));
Run Code Online (Sandbox Code Playgroud)

祝你好运


小智 8

express-handlebars如果你想与commonJS模块一起使用,你应该像这样导入它:


const express = require('express');
const { engine } = require('express-handlebars');

const app = express();

app.engine('handlebars', engine({ extname: '.hbs', defaultLayout: "main"}));
app.set('view engine', 'handlebars');
app.set("views", "./views");

app.get('/', (req, res) => {
    res.render('home');
});

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

如果你想使用ES6模块,你可以按照官方的readme进行操作


Vis*_*hnu 7

"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
                   ^
TypeError: exphbs is not a function"
Run Code Online (Sandbox Code Playgroud)

这个错误可以通过engine() functionexphbs常量中添加 a 来解决,或者,只需调用该engine()函数即可。

exphbs.engine(),因为exphbs是常量而不是函数,所以我们必须engine()express-handlebars包中调用该函数,这样我们才能使用handlebars模板引擎!

快速车把使用指南


如果您不使用布局 ( main.handlebars/ main.hbs) 文件,您可能会收到第二个错误。
如果有人遇到main.handlebars/main.hbs文件错误。
您可以将其设置defaultLayoutnull.

像这样的东西:

"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
                   ^
TypeError: exphbs is not a function"
Run Code Online (Sandbox Code Playgroud)

layoutsDir是布局的位置(如果有的话 - 如果您不使用布局,则可以省略)。
extname(扩展名)取决于用户的选择!