Handles Bars hbs 不是函数

Handles Bars hbs is not a function

我刚刚将视图中的布局文件夹设置为

app.engine('hbs', hbs({extname: 'hbs', defualtLayout : 'layout' , layoutDir: __dirname + '/views/layouts'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

模块使用是

var hbs = require('hbs');

这给了我以下错误

app.engine('hbs', hbs({extname: 'hbs', defualtLayout : 'layout' , layoutDir: __dirname + '/views/layouts'}));
                  ^

TypeError: hbs is not a function

当我将模块更改为

时它正在工作
var hbs = require('express-handlebars');

因为hbs模块导出的实际上不是函数。

您应该阅读 description file of the hbs module,它告诉您如何使用它。

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

To use a different extension (i.e. html) for your template files:

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

app.engine('html', require('hbs').__express);

另一种方法是使用express-handlebars模块,它可以用在你的路上。

app.engine('handlebars', exphbs({defaultLayout: 'main'}));

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

这对我有用。

确保安装这个包: npm 安装 express-handlebars

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

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.engine('hbs', hbs.engine({
  extname: 'hbs',
  defaultLayout: 'layout',
  layoutsDir: __dirname + '/views/layout/',
  partialsDir: __dirname + '/views/partials'
}))

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.engine('hbs',hbs.engine({extname:'hbs',defaultLayout:'layout',layoutsDir:__dirname+'/views/layout/',partialDir:__dirname+'/views/partials/'}))

hbs更改为hbs.engine

使用 hbs.engine() 如下所示

app.engine('hbs', hbs.engine({
    extname: 'hbs',
    defaultLayout: 'layout',
    layoutDir: __dirname + '/views/layouts'
}));