Node.js 无法在带有快速手柄的目录中查找视图
我正在遵循从Express Generator获得的基本应用程序布局,并尝试将其配置为把手 片段:Node.js 无法在带有快速手柄的目录中查找视图,node.js,express,handlebars.js,Node.js,Express,Handlebars.js,我正在遵循从Express Generator获得的基本应用程序布局,并尝试将其配置为把手 片段: var exphbs = require('express-handlebars'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views/')); app.engine('handlebars', exphbs({defaultLayout: 'main'})); ap
var exphbs = require('express-handlebars');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views/'));
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
一切正常,直到我尝试将把手的延长部分更改为.hbs
,如下所示:
app.engine('handlebars', exphbs({defaultLayout: 'main', extname: '.hbs'}));
(当然还有重命名文件)
这导致:
错误:无法在视图目录中查找视图“错误”
我查看了express-handlebar.js源代码中的函数expresshandlebar(config)
,它确实尝试适当地设置extname app
我做错了什么?有些反直觉,设置扩展名是不够的 所需的设置是:
app.engine('hbs', exphbs({defaultLayout: 'main', extname: '.hbs'}));
app.set('view engine', 'hbs');
在视图目录中创建error.hbs文件解决了我的问题
var exphbs = require('express-handlebars');
// view engine setup
app.engine('hbs', exphbs({ defaultLayout: 'main', extname: '.hbs' }));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
对于最初没有看到它的任何其他人:引擎名称必须与文件扩展名相同。有人知道为什么吗?@musicin3d它确实让人感觉像是Express中的一个bug。我们发现:虽然它是经过设计的,但似乎违反了直觉,尽管故障可能出在Express把手上。本质上,作为最终用户,我们最终设置了两次扩展。