2013-03-10 54 views
1

在我的代碼我現在有快速靜態文件 - 所有路由前綴

app.use(express.static(__dirname + "/../styles")) 
app.use(express.static(__dirname + "/../public")) 
app.use(express.static(__dirname + "/../scripts")) 
app.use("/flosses", express.static(__dirname + "/../styles")) 
app.use("/flosses", express.static(__dirname + "/../public")) 
app.use("/flosses", express.static(__dirname + "/../scripts")) 
app.use("/flosses/edit", express.static(__dirname + "/../styles")) 
app.use("/flosses/edit", express.static(__dirname + "/../public")) 
app.use("/flosses/edit", express.static(__dirname + "/../scripts")) 
app.use("/accounts", express.static(__dirname + "/../styles")) 
app.use("/accounts", express.static(__dirname + "/../public")) 
app.use("/accounts", express.static(__dirname + "/../scripts")) 

這是非常乏味的。我可以做這樣的事嗎?

app.use("*",express.static(__dirname + "/../scripts")) 

注:我有3個不同的目錄中我的CSS,JS和圖片,我需要/thing1/index.css,/thing2/index.css,etc。

感謝,
阿里

+0

爲什麼要將靜態中間件添加到所有路由中?前三行應該足夠了。 – loganfsmyth 2013-03-10 17:59:46

+0

@loganfsmyth:這是它唯一的工作方式 – 2013-03-10 18:01:42

+0

你是否在你的'普通'('app.get'和這樣的)路由之後在*或*之前配置那些靜態路由? – robertklep 2013-03-10 18:03:50

回答

1

你可以使用這個,這是一個有點哈克IMO但它應該工作:

// place this after your routes 
app.routes.get.forEach(function(r) { 
    app.use(r.path, express.static(__dirname + '/public')); 
}); 

它僅適用於GET路線(因此app.routes.get),和你可能不需要路線,所以你可以過濾r.path只挑出你需要的路線)。另外,我不確定性能的影響。

+0

我不能得到這個工作,[這裏是我的代碼的要點](https:/ /gist.github.com/porad/5129852) – 2013-03-10 18:52:35

+0

任何想法爲什麼它不起作用? – 2013-03-10 19:04:37

+0

這真的看起來很可怕,如果你擴大你的問題來解釋你的確切含義(在文件/目錄方面)以及你希望達到的目標,這可能會更明智。 – robertklep 2013-03-10 20:38:04

1

爲什麼不直接在網站的根部引用靜態圖像,而不是將它們添加到應用程序URI的每個級別?

這就是大多數人的做法,以及這些框架的設計目的。

+0

不會這樣暴露你的服務器劇本給公衆? – redben 2013-12-10 13:36:57

+0

你顯然不會公開你的src /目錄:),但是你可以將www.example.com映射到你的web服務器上的/ project/static – ExxKA 2013-12-10 14:27:50