Express配置hbs模板引擎报错TypeError: exphbs is not a function如何解决
报错产生原因
该报错由express-handlebars包的版本变更导致的导出规则变化触发:
- v6.0.0之前的版本默认导出的是可直接调用的配置函数,你现有的代码写法仅适配该类旧版本
- v6.0.0及之后的版本默认导出的是对象,可用的配置函数被挂载在对象的
engine属性下,直接调用导出的整个对象就会触发类型错误
解决方法
方法1:适配新版本语法(推荐)
修改模块引入和引擎注册逻辑即可:
- 调整模块引入代码:
// 旧写法(仅v6之前版本适用) // const exphbs = require('express-handlebars') // 新写法(v6及之后版本适用) const { engine } = require('express-handlebars')
- 修改模板引擎注册代码:
app.engine('hbs', engine({ extname: 'hbs', defaultLayout: 'mainLayout', layoutsDir: __dirname + '/views/layout/' }))
修改完成后即可正常运行。
方法2:降级到兼容版本
如果不需要使用新版本特性,不想修改现有代码,可以直接将包降级到v5.x的稳定版本:
执行安装命令:npm install express-handlebars@5.3.5
安装完成后原有代码无需调整即可正常运行。
内容的提问来源于stack exchange,提问作者Samidi Ensertado
相关产品推荐
相关产品推荐

