2014-01-30 25 views
1

我希望將所有請求都重定向到位於Views文件夾中的index.ejs視圖。在我routes.js文件,我已經添加了這一點:Express:使用ejs時未找到靜態文件

module.exports = function (app) { 

    app.get('/', function(req, res) { 
    res.render('index', {title: "TODO"}) 
}); 
} 

索引視圖包含所有頁面的標記,因爲它會做個SPA,所以我會動態替換在客戶端的看法。

的問題是,我引用位於公共文件夾中的腳本,他們都沒有找到,我收到了404:

script src="public/app/app.js"></script> 

我想這是因爲快遞不知道如何服務器上的文件。我指定,一切都在公共文件夾應該是靜態文件:

app.use(express.static(config.root + '/public')) 

現在,如果我不使用EJS模板,如果我使用一個index.html文件在公用文件夾,而不是一個視圖,它工作正常。我只是要做到這一點,而不是:

app.get('*', function(req, res) { 
    res.sendfile('./public/index.html'); 
}); 

但我想利用EJS模板添加捆綁頁面,而不是將腳本添加一個接一個。

那麼我的代碼有什麼問題?我怎樣才能解決404文件的JavaScript文件?

+0

如果您在動態路由之後使用靜態路由作爲靜態文件,您是否期望動態路由不匹配?不知道我明白了,但爲什麼如果一切都是靜態的,你甚至還需要路線? – adeneo

+0

只有JavaScript和其他資源(CSS,圖像)是靜態的。只有一條路徑通向同一視圖(index.ejs),因爲它是單頁應用程序。但是,當我將請求重定向到一個視圖時,似乎不再找到靜態資源。 – Sam

+0

靜態資源的路徑是否正確?你只是在瀏覽器中得到404,或者你在節點控制檯中有錯誤嗎? – adeneo

回答

1

明白了。腳本文件的路徑不正確。它應該是app/app.js而不是public/app/app.js

我認爲這就是靜態中間件的工作原理。