当我只将此路由与所有其他路由一起使用时,静态文件服务良好:
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);
这造成了url路由的问题。但奇怪的是,node.js
并没有告诉我中间件的"错误设置"。
您的代码没有错,但请记住,对不存在的东西的任何请求都会被您的get捕获('/*',…)。
也就是说,你在/public
上加载public_dir
,这意味着如果public_dir
被定义为public/website/
,你必须执行http://127.0.0.1:3000/public/application.js
才能访问位于/public/website/application.js
的文件