2013-02-04 35 views
0

如何为我的“视图”使用子文件夹? 在主“app.js”我给自己定的根文件夹,像这样的观点:子文件夹视图expressjs 3x/nodejs

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/'); 
}; 

文件夹看起来是这样的:

​​3210

但仍无法找到它。 “错误:无法查找视图‘你好/意见’ 感谢

回答

0

我通过像这样的基础视图设置为目录的根目录解决了这个问题:

app.set('views', __dirname); 

而且从添加的文件夹在像这样的控制器根:

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

我感到奇怪的是你自己的答案的作品,因为你应该告诉快递渲染特定视图,和Hello /视图是一个文件夹,但我不是。熟悉您用于控制器的代码模式(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设置为除了玉之外的东西。

3

其实,我做了一个更好的解决方案。 在应用配置我只设置默认视图像这样:”

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

后来我inlcude一个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'); 

这将覆盖视图文件夹复制到文件夹“应用程序/ XXX /视图”中指定的一个,甚至可以让你在该文件夹的根目录中指定一个新的viewtype像这样:

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

exports.engine = 'jade'; 

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

可以设置视图作为路径

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

可以使用app.get(“视图”)检查所生成的路径阵列;应该返回一个数组。

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

Express会搜索阵列中的可用路径。然后您可以使用像这样的文件名进行渲染

res.render('index'); 
res.render('profile'); 
相关问题