2013-03-10 137 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