express-handlebars 6.0.1版本报错TypeError: hbs is not a function问题求助
问题根源
express-handlebars v6.0.0及以上版本进行了破坏性API调整,v5及更早版本的默认导出为可直接调用的配置函数,v6+版本默认导出为包含engine、create等方法的对象,直接调用hbs()会触发类型错误。
解决方案
提供两种适配写法,按需选择即可:
写法1:最简适配(改动量最小)
仅修改导入语句即可和原有配置逻辑兼容:
var express = require('express'); // 导入时解构出engine方法并重命名为hbs var { engine: hbs } = require('express-handlebars') var app = express(); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); app.engine('hbs', hbs({ layoutsDir: `${__dirname}/views/layouts`, extname: `hbs`, defaultLayout: 'layout', partialsDir: `${__dirname}/views/partials` }))
写法2:实例化写法(推荐,支持后续扩展)
如果需要对模板引擎做自定义helper、decorator等扩展,使用create方法实例化更便于后续操作:
var express = require('express'); var exphbs = require('express-handlebars') var app = express(); // 先完成配置生成实例 var hbsInstance = exphbs.create({ layoutsDir: `${__dirname}/views/layouts`, extname: `hbs`, defaultLayout: 'layout', partialsDir: `${__dirname}/views/partials` }) app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); // 注册引擎时使用实例的engine属性 app.engine('hbs', hbsInstance.engine);
内容的提问来源于stack exchange,提问作者joe shajan
相关产品推荐
相关产品推荐

