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)
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进行操作
"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
^
TypeError: exphbs is not a function"
Run Code Online (Sandbox Code Playgroud)
这个错误可以通过engine() function在exphbs常量中添加 a 来解决,或者,只需调用该engine()函数即可。
exphbs.engine(),因为exphbs是常量而不是函数,所以我们必须engine()从express-handlebars包中调用该函数,这样我们才能使用handlebars模板引擎!
如果您不使用布局 ( main.handlebars/ main.hbs) 文件,您可能会收到第二个错误。
如果有人遇到main.handlebars/main.hbs文件错误。
您可以将其设置defaultLayout为null.
像这样的东西:
"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
^
TypeError: exphbs is not a function"
Run Code Online (Sandbox Code Playgroud)
layoutsDir是布局的位置(如果有的话 - 如果您不使用布局,则可以省略)。
extname(扩展名)取决于用户的选择!