ExpressJS:如何忽略我的路由中的公共静态文件?

app.get("/:name?/:group?", function(req, res){... 

是匹配在我的公共目录中的文件。 所以,如果我包括一个样式表:

 <link type="text/css" href="/stylesheets/style.css" /> 

节点将匹配/stylesheets/style.css并为值样式表分配名称 ,并将值style.css 分组

避免这种情况的最好方法是什么?

最简单的事情可能是确保express在路由器中间件之前运行静态提供程序中间件。 你可以这样做:

 app.use(express.static(__dirname + '/public')); app.use(app.router); 

这样静态文件将会find并响应,路由器将不会被执行。 我对路由器的默认位置(最后)与我的coffeescript文件的编译搞砸了类似的困惑。 仅供参考,这里有文档(searchapp.router的页面,你会看到一个解释性的段落。

你也可以有一个像Nginx这样的反向代理来处理你的静态文件。 我相信很多专业的Node / Ruby on Rails设置都是这样做的。

对于任何需要它的人来说,我的解决scheme是使用中间件。 如果有人find更好的解决scheme,请让我知道!

 public = ['images', 'javascripts', 'stylesheets', 'favicon.ico'] ignore = (req, res, next) -> if public.indexOf(req.params.name) != -1 console.log "Ignoring static file: #{req.params.name}/#{req.params.group}" next('route') else next() app.get "/:name?/:group?", ignore, (req, res) -> ...