You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express配置handlebars引擎报hbs is not a function错误如何解决

报错成因

你遇到的TypeError: hbs is not a function是express-handlebars版本差异导致的:

  • v6及以上的新版本不再直接导出模板引擎函数,而是将创建引擎的方法封装在导出对象的engine属性下,直接调用导入的hbs对象就会触发类型错误
  • 另外你写的配置项defaultLayouts是拼写错误,正确配置名是单数形式defaultLayout,就算解决了函数调用问题,这个错误配置也会导致后续布局加载异常
修复方法

两种方案二选一即可:

方案一:适配新版本写法(推荐)

修改导入语句和引擎注册代码:

  1. 替换原来的hbs导入语句
// 原代码:const hbs = require('express-handlebars');
const { engine } = require('express-handlebars');
  1. 修正引擎注册逻辑,同时改对配置项
// 原错误代码: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:42:16