【问题标题】:Views in subdirectories with expressjs带有 expressjs 的子目录中的视图
【发布时间】:2015-09-19 14:11:04
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我在本地进行了测试,一切正常。只有一个错误

    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);
    

    【讨论】:

      【解决方案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',...

      【讨论】:

      • 这个解决方案可以应用在我的案例中。
      【解决方案3】:

      更改您的设置视图。它应该是
      app.set('views', path.join(__dirname, 'views'));

      【讨论】:

        【解决方案4】:

        我认为您需要将视图的文件扩展名从 hbs 更改为车把

        【讨论】:

          猜你喜欢
          • 2022-11-30
          • 1970-01-01
          • 2014-07-05
          • 1970-01-01
          • 1970-01-01
          • 2012-09-09
          • 1970-01-01
          • 2018-04-29
          • 2011-01-08
          相关资源
          最近更新 更多