配置express-handlebars时报错TypeError: handlebars is not a function如何解决
报错原因
你安装的是express-handlebars v6.0及以上版本,该版本调整了模块导出规则,不再默认导出可直接调用的构造函数,仅旧的v5.x及更早版本支持直接调用require('express-handlebars')返回的对象。讲师代码可正常运行是因为其使用的是旧版依赖。
解决方案
方案1:适配新版本(推荐)
修改handlebars初始化代码即可,有两种等价写法:
写法1:解构引入engine方法
// 将原引入行修改为解构写法 const { engine } = require('express-handlebars'); // 注册模板引擎 app.engine("handlebars", engine()) app.set("view engine", "handlebars")
写法2:调用导出对象下的engine属性
const handlebars = require('express-handlebars'); // 调用对象下的engine方法而非直接调用handlebars本身 app.engine("handlebars", handlebars.engine()) app.set("view engine", "handlebars")
如果需要自定义模板配置(如默认布局、路径、后缀名等),直接向engine()方法传入配置对象即可:
app.engine("handlebars", engine({ layoutsDir: "./views/layouts", defaultLayout: "main", extname: ".hbs" }))
方案2:降级到旧版本
如果希望完全沿用原有代码无需修改,可卸载现有版本后安装v5.x旧版:
npm uninstall express-handlebars npm install express-handlebars@5.3.5 --save
安装完成后直接运行原有代码即可正常启动。
内容的提问来源于stack exchange,提问作者alieen_234
相关产品推荐
相关产品推荐

