Express配置handlebars引擎报hbs is not a function错误如何解决
报错成因
你遇到的TypeError: hbs is not a function是express-handlebars版本差异导致的:
- v6及以上的新版本不再直接导出模板引擎函数,而是将创建引擎的方法封装在导出对象的
engine属性下,直接调用导入的hbs对象就会触发类型错误 - 另外你写的配置项
defaultLayouts是拼写错误,正确配置名是单数形式defaultLayout,就算解决了函数调用问题,这个错误配置也会导致后续布局加载异常
修复方法
两种方案二选一即可:
方案一:适配新版本写法(推荐)
修改导入语句和引擎注册代码:
- 替换原来的hbs导入语句
// 原代码:const hbs = require('express-handlebars'); const { engine } = require('express-handlebars');
- 修正引擎注册逻辑,同时改对配置项
// 原错误代码:app.engine('handlebars', hbs({ defaultLayouts: true })); app.engine('handlebars', engine({ defaultLayout: 'main' })); app.set('view engine', 'handlebars'); // 建议补充视图路径配置,避免路径解析问题 app.set('views', path.join(__dirname, 'views'));
注意:使用默认布局需要在views目录下创建layouts文件夹,新建main.handlebars作为默认布局模板,否则会报找不到布局文件的错误。
方案二:降级到旧版本兼容原有写法
如果不想调整代码结构,可以将express-handlebars降级到v5旧版本,执行安装命令:
npm install express-handlebars@5
降级完成后,同样需要把配置项的defaultLayouts: true改成正确的defaultLayout配置,否则布局功能无法正常生效。
额外提示:你贴出的MongoDB连接代码里存在两处拼写错误(
successfuly、failled),不影响程序运行,但可以顺手修正。
内容的提问来源于stack exchange,提问作者biidra1
相关产品推荐
相关产品推荐

