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

时间:2011-07-16 19:32:37

标签: node.js static match public express

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

匹配我公共目录中的文件。因此,如果我包含样式表:

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

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

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

3 个答案:

答案 0 :(得分:22)

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

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

这样静态文件就会找到并响应,路由器将不会被执行。我对路由器的默认位置(最后)与我的coffeescript文件汇编搞砸了。仅供参考,here上有文档(搜索app.router页面,您会看到一个解释性段落。

答案 1 :(得分:2)

您还可以使用Nginx之类的反向代理来处理静态文件。我相信很多专业的Node / Ruby on Rails设置都是这样做的。

答案 2 :(得分:1)

对于任何可能需要它的人,我的解决方案是使用中间件。如果有人找到更好的解决方案,请告诉我!

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) -> ...