子文件夹视图expressjs 3x / nodejs

时间:2013-02-04 11:37:49

标签: node.js express

如何在“观看次数”中使用子文件夹? 在主'app.js'中,我为视图设置了根文件夹,如下所示:

 app.configure(function(){
       app.set('view engine', 'jade');
       app.set('views', __dirname + '/apps' );
       app.use(express.bodyParser());
       app.use(express.methodOverride());
       app.use(express.static(__dirname + '/apps' ));
       app.use(app.router);
 });

我的控制器像这样松了一口气:

 module.exports = function(req, res, base) {
       res.render( 'hello/views/');
 };

该文件夹如下所示:

 ./apps/hello/views/index.js

但它仍然无法找到它。 “错误:无法查找视图”hello / views“ 谢谢!

4 个答案:

答案 0 :(得分:3)

实际上,我提出了一个更好的解决方案。 在app配置中,我只是设置默认视图:“

 app.set('view engine', 'jade');
 app.set('views', __dirname + '/views');

后来我参与了一个boot.js(基于expressjs的mvc示例),其中包含以下内容:

 // allow specifying the view engine
 if (obj.engine) app.set('view engine', obj.engine);
 app.set('views', __dirname + '/../apps/' + name + '/views');

这会将视图文件夹覆盖到'apps / xxx / views'文件夹中指定的视图文件夹,甚至允许您在该文件夹的根目录中指定新的视图类型,如下所示:

 // filename = /apps/hello/index.js

 exports.engine = 'jade';

 // Render the indexpage
 exports.index = function(req, res, next){
      res.render('hello');
 };

答案 1 :(得分:1)

我很惊讶您的自我答案有效,因为您应该告诉express要呈现特定视图,并且hello / views是一个文件夹。但是我不熟悉你用于控制器的代码模式(由于Express中间件使用basefunction(req,res,next)参数会让我失望。)

我的路线看起来像这样:

app.set('views', __dirname + '/apps' );
...
app.get('/hello', function(req,res){
  res.render('hello/views/index')
});

在这种情况下,./apps/hello/views/index.jade是一个玉文件,而不是一个javascript文件。如果您的模板是javascript,也许您应该将view engine设置为除jade之外的其他内容。

答案 2 :(得分:1)

您可以将视图设置为路径数组

app.set('views', [path.join(__dirname, 'views/users/'), path.join(__dirname, 'views')])

您可以使用app.get('views')检查生成的路径;哪个应该返回一个数组。

[/server/views/users/, /server/views]

Express将在数组中搜索可用路径。然后,您可以使用像

这样的文件名进行渲染
res.render( 'index');
res.render( 'profile');

答案 3 :(得分:0)

我通过将基本视图设置为目录的根来解决了这个问题,如下所示:

   app.set('views', __dirname);

并在控制器中添加了根目录中的文件夹,如下所示:

   res.render( 'apps/hello/views/');