使用express-handlebars报错engine is not defined是什么原因
报错原因
- 代码中仅将
express-handlebars模块整体导入赋值给了exphbs变量,从未声明过名为engine的独立变量,直接调用engine()会直接触发引用不存在变量的ReferenceError。 express-handlebars不同大版本的导出规则存在差异:v6及以上新版本默认导出的是引擎创建函数,v5及更早旧版本导出的是挂载了engine方法的对象,无论哪个版本都不会自动注入全局的engine标识符供直接调用。
修复方法
根据你安装的版本选择对应写法即可:
- v6及以上新版本(当前npm默认安装的主流版本):直接用导入的
exphbs变量作为引擎函数调用
const express = require("express"); const exphbs = require('express-handlebars'); const app = express(); app.engine('.hbs', exphbs({defaultLayout: 'main', extname: '.hbs'})); app.set('view engine', '.hbs');
- v5及更早旧版本:从导入的模块上取
engine方法调用,推荐用解构写法
const express = require("express"); const { engine } = require('express-handlebars'); const app = express(); app.engine('.hbs', engine({defaultLayout: 'main', extname: '.hbs'})); app.set('view engine', '.hbs');
不确定本地安装版本时,优先使用上述解构导入
engine的写法,v3至最新版本的express-handlebars都兼容该写法,不会出现导出结构不匹配的问题。
内容的提问来源于stack exchange,提问作者Spect
相关产品推荐
相关产品推荐

