运行nodemon报TypeError: handlebars is not a function错误怎么解决?
报错触发原因
你安装的express-handlebars为v6.0及以上版本,该版本做了不兼容的导出规则变更:不再默认导出可直接调用的构造函数,因此直接执行handlebars()会抛出「不是函数」的类型错误。
修复方案
有两种修复方式可选:
方式1:适配高版本API(推荐)
修改导入和模板引擎注册的代码即可,无需降级依赖:
// 将原来的导入语句替换为解构导出的engine方法 const { engine } = require('express-handlebars'); const app=express(); // 注册模板引擎时直接调用engine方法 app.engine("handlebars",engine({defaultLayout:'main'})); app.set('view engine','handlebars');
如果需要更复杂的配置,也可以用官方推荐的create方法初始化:
const expressHandlebars = require('express-handlebars'); const hbs = expressHandlebars.create({defaultLayout:'main'}); app.engine('handlebars', hbs.engine); app.set('view engine', 'handlebars');
方式2:降级依赖到兼容旧写法的版本
如果不想修改业务代码,可以将express-handlebars降级到v5.x版本,执行以下安装命令即可:npm install express-handlebars@5.3.4
降级完成后原有代码可直接正常运行。
内容的提问来源于stack exchange,提问作者Yuri Schneider
相关产品推荐
相关产品推荐

