2017-07-19 88 views
0

我的問題是非常類似this stackoverflow問題。Nodejs和快速靜態視圖路由

我有我的目錄結構:

|-static 
|---css 
|---img 
|---js 
|-views 
|---login.ejs 
|---pure.html 
|---dash 
|-----dashboard.ejs 
|-----alsopure.html 

我的配置:

app.set('views', __dirname + '/views'); 
app.use(express.static(__dirname + '/static')); 

我還定義了路線爲:

app.get('/login', function(req,res){ 
    //some locals 
    res.render('login.ejs', locals); 
}); 

app.get('/dash', function(req,res){ 
    locals.date = new Date().toLocaleDateString(); 
    res.render('dash/dashboard.ejs', locals); 
}); 

在視圖文件夾中,我一直在我的純靜態html和我的動態ejs文件。

現在,我如何提供視圖目錄中的靜態html?因爲如果我將添加/ views文件夾作爲一個靜態的用戶將能夠看到我的ejs文件,如果他們擊中了正確的網址。

由於有多個html文件,我不想爲每個新頁面添加一條新路線。

此外,有沒有什麼方法可以讓我指出我的視圖引擎是一個靜態html,並且不需要'處理'這個頁面?

謝謝!

+0

爲什麼不將HTML文件移動到靜態文件夾並從那裏提供文件? – CuriousMind

+0

或者,您可以添加一個'公共'文件夾,並將其設置爲靜態? –

+0

@CuriousMind,因爲我想保留所有視圖相關的內容在一個文件夾中,以便於訪問和組織。 –

回答

0

所以,你可以使用nodejsfs,然後路線是這樣的:

app.get(/.*/, function(req, res, next) { 
    var path = __dirname + '/views/' + req.path + '.html'; 
    if(fs.existsSync(path)) { 
    // Consolidate function to load html with path 
    } 
    else { 
    next(); 
    } 
} 

或者,你可以使用它作爲中間件:

app.use(function(req, res, next) { 
    var path = __dirname + '/views/' + req.path + '.html'; 
    if(fs.existsSync(path)) { 
    // Consolidate function to load html with path 
    } 
    else { 
    next(); 
    } 
} 

,但我認爲這將成爲一個膨脹的程序:)。因爲每個響應都會搜索html文件。

+0

沿着類似的路線(儘管我會建議使用適當的中間件),你可以檢查請求的路徑是否有'.ejs'擴展名,並拒絕提供它。 – robertklep

+0

是的,謝謝。我剛剛編輯了評論@robertklep。 –