使用expressjs

时间:2015-09-19 14:11:05

标签: node.js model-view-controller express

我有一个非常基本的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'});
});

这个非常基本的设置缺少什么?

4 个答案:

答案 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