从expressjs路由中排除文件夹

时间:2013-12-04 15:00:06

标签: javascript node.js backbone.js express

在我的expressjs应用程序中,公共资产以这种方式加载:

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

然后我将所有请求重定向到索引,以使用 Backbone 处理每个路径

app.get('*', routes.index);

为什么 / public 文件夹也是重定向的?

此外,如果我尝试添加'/ public'作为第一个参数,它也不起作用:

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

2 个答案:

答案 0 :(得分:1)

对于任何与静态文件服务相关的问题:

在评估问题的可能解决方案之前,请务必在 app.use(app.router)之前定义 express.static

我在网上找到了很多例子:有时它在下面定义,有时不是。 把它放在首先解决了我所有的问题。

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

答案 1 :(得分:1)

app.router之前放置静态路由器之后,express将首先尝试通过匹配静态文件夹(public)中的文件来提供请求,如果没有匹配,它会将其传递给{ {1}}以下规则与所有内容匹配;

routes.index

另外,要匹配app.get('*', routes.index); 目录中的任何文件,您无需在请求网址中使用public

例如,要获取/public/public/images/icon.png,您只需访问public/js/scripts.js/images/icon.png。如果您调用/js/scripts.js请求,它将与静态目录中的任何内容都不匹配,并将请求传递给/public

希望它有所帮助。