app.get("/:name?/:group?", function(req, res){...
匹配我公共目录中的文件。因此,如果我包含样式表:
<link type="text/css" href="/stylesheets/style.css" />
节点将匹配/stylesheets/style.css,并为名称分配值样式表和组值 style.css < / em>的
避免这种情况的最佳方法是什么?
答案 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) -> ...