2013-04-09 40 views
0

根據ExpressJS application settings documentation,應該能夠將views設置爲視圖引擎的目錄。我正在經歷我認爲可能是一個錯誤;不要在views目錄中查找,而是在static目錄中查找。顯然它失敗了,因爲它不在那裏。我通過將視圖移動到靜態目錄來確認這一點,並且錯誤消失。ExpressJS在靜態目錄中查找視圖,忽略視圖目錄

您可以通過克隆this Cloud9 project來查看此錯誤。我一直無法證實Cloud9之外的這個錯誤,(我沒有可用的Linux盒子)。

的目錄結構是簡單

項目

|-client 
    |-assets 
    |-views 
    |-index.html 
|-server.js 

這裏是服務器配置

var viewDir = __dirname + '/client/views/'; 
var assetDir = __dirname + '/client/assets/'; 

//Configure 
app.configure(function() { 
    app.set('views', viewDir); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express['static'](assetDir)); 
    app.use(app.router); 
}); 

app.get('/', function(req, res){   
    res.render('index'); 
}); 
+0

在黑暗中拍攝:如果您從viewDir和assetDir中刪除最後一個斜槓,它會起作用嗎? – 2013-04-09 21:02:13

+0

試過了。 – Tyrsius 2013-04-09 21:15:50

回答

4

你需要告訴它如何通過設置一個引擎來渲染。

如回聲:

app.engine('.html', function (file, options, next) { 
    fs.readFile(file, function (err, data) { 
    if (err) { 
     next(err); 
    } else { 
     next(null, data.toString()); 
    } 
    }); 
}); 

你也需要把app.get('/' . . .app.use(express.static之前,如果你希望它採取遵。

您可以在這裏嘗試一下:http://runnable.com/UWTRSNJq0z5OAADk

+0

非常酷的網站,有多久了? – Tyrsius 2013-04-10 05:36:27

+0

不久,我目前努力在工作中添加一個終端^ _^ – generalhenry 2013-04-10 05:42:00

+0

它看起來不錯。看起來像cloud9和jsFiddle之間的一個很好的平衡。有沒有什麼辦法可以讓它真的把'html'看作渲染的一部分,它們對於其他視圖的方式呢?如果我使用'ejs',我可以使用'res.render('index')',但是你的方法需要我使用'res.render('index.html')'。 – Tyrsius 2013-04-10 06:02:22

2

HTML文件靜態文件,而在視圖文件必須由如玉或EJS模板引擎來渲染。如果你想呈現html文件,那麼請檢查這些問題。

  1. Render basic HTML view?
  2. Using express without a template engine

模板引擎動態渲染視圖。如果你只有靜態頁面,那麼你不需要它。但是,如果您有動態內容,則必須使用模板。