如何在“观看次数”中使用子文件夹? 在主'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“ 谢谢!
答案 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中间件使用base
,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
设置为除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/');