0

如何为我的“视图”使用子文件夹?在主“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

4 回答 4

3

实际上,我提出了一个更好的解决方案。在应用程序配置中,我只是设置了默认视图,如下所示:"

 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');
 };
于 2013-02-07T10:47:02.310 回答
1

我很惊讶您的自我回答有效,因为您应该告诉 express 呈现特定视图,而 hello/views 是一个文件夹。但是我不熟悉您用于控制器的代码模式(base参数是让我失望的原因,因为 Express 中间件使用function(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为翡翠以外的其他内容。

于 2013-02-06T22:39:09.013 回答
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');
于 2015-08-04T14:54:29.980 回答
0

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

   app.set('views', __dirname);

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

   res.render( 'apps/hello/views/');
于 2013-02-04T12:04:03.477 回答