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