2013-02-04 36 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'); 
相關問題