Node.js / Express.js。与通配符路由器一起使用时,无法识别静态路由

时间:2013-12-16 23:20:09

标签: javascript node.js express

当我只使用这条路线和其他所有路线时,那些静态文件很好用:

var public_dir = path.join(__dirname, 'public');
app.use('/public', express.static(public_dir));

但是当我在下面添加这些行时 - 所有请求都被这个路由器捕获(不是前一个):

app.get('/*', function(req, res){
    res.redirect('/#!' + req.path);
});

这对我来说很奇怪,因为/public定义是第一位的。但是所有请求都转到最后定义的/*请求处理程序。

现在,如果我尝试打开页面http://127.0.0.1:3000/public/website/application.js,我会被重定向到http://127.0.0.1:3000/#!/public/website/application.js。为什么会这样,以及如何以最佳方式解决这种情况?

非常感谢你!


解决方案很简单。我没有在中间件列表中发表声明。

app.use(app.router);

这会产生网址路由问题。但奇怪的是,node.js没有告诉我关于"设置不正确的问题"中间件。

1 个答案:

答案 0 :(得分:4)

您的代码没有任何问题,但请记住,任何不存在的请求都会被您的get('/ *',...)捕获。

这就是说,您在public_dir加载/public,如果public_dir被定义为public/website/您必须http://127.0.0.1:3000/public/application.js才能访问文件找到/public/website/application.js