我有一个非常基本的expressjs应用程序,/
路由加载views/main/
中的视图。但是,我收到以下错误:
Error: Failed to lookup view "main/index" in views directory "/Users/n0pe/Sync/src/proj/views/"
这是我的结构(省略不重要的):
/proj
/views
/main
index.hbs
app.js
这是我的app.js(重要部分):
var express = require('express');
var app = express();
app.set('views', __dirname+'/views/');
app.set('view engine', 'handlebars');
这是控制器:
router.get('/', function(req, res, next) {
res.render('main/index', {title: 'test'});
});
这个非常基本的设置缺少什么?
答案 0 :(得分:4)
我在当地进行了测试,一切正常。只是一个错误
从app.set('view engine', 'handlebars');
到app.set('view engine', 'hbs');
我的例子
var express = require('express'),
app = express();
app.engine('html', require('hbs').__express);
app.set('views', __dirname+'/views/');
app.set('view engine', 'hbs');
app.get('/', function(req, res) {
res.render('main/index',{title :"page index"});
});
app.listen(3000);
答案 1 :(得分:2)
我改变了两件事,它为我工作。
app.set('views', [path.join(__dirname, 'views'),path.join(__dirname, 'views/main')]);
我将数组传递给app.set
并添加了子目录
res.render('../main/index', {title :"page index"}, function(err, html) {
console.log(err);
});
我更改了目录路径以相对地从父目录导航。
使用../
使它以某种方式工作。另外,将目录添加到app.set后,您可以直接调用index
,例如res.render('index',...
答案 2 :(得分:0)
更改您的设置视图。它应该是
app.set(' views',path.join(__ dirname,' views'));
答案 3 :(得分:0)
我认为你需要将视图的文件扩展名从hbs更改为handlebars