运行Node.js Express项目时出现TypeError: hbs is not a function错误求助
解决TypeError: hbs is not a function错误
这个错误的核心原因是express-handlebars的导入和引擎注册方式不符合当前版本要求,以下是具体解决步骤:
1. 确认express-handlebars版本
在项目根目录执行命令查看当前版本:
npm list express-handlebars
2. 修改app.js中的引擎注册代码
如果版本是v4及以上(目前主流版本),旧写法会报错——因为新版本的express-handlebars导出的不是直接可调用的函数,而是包含create方法的对象。
错误写法示例(触发报错):
const hbs = require('express-handlebars'); app.engine('hbs', hbs()); // 此处hbs不是函数,抛出TypeError
正确写法:
方式一:解构create方法
const { create } = require('express-handlebars'); // 注册引擎并配置模板参数 app.engine('hbs', create({ extname: '.hbs', // 指定模板文件后缀 layoutsDir: './views/layouts', // 布局文件目录(按需配置) defaultLayout: 'main' // 默认布局文件(按需配置) }).engine); // 设置视图引擎 app.set('view engine', 'hbs');
方式二:直接调用create
const expressHandlebars = require('express-handlebars'); app.engine('hbs', expressHandlebars.create({ extname: '.hbs' }).engine); app.set('view engine', 'hbs');
3. 排查依赖冲突
如果同时安装了hbs和express-handlebars两个包,会导致模块导入混淆,执行命令卸载多余的hbs包:
npm uninstall hbs
4. 重新启动服务
修改完成后,重启服务:
npm start
内容的提问来源于stack exchange,提问作者salahaKA
相关产品推荐
相关产品推荐

