当我仅将此路由与其他所有路由一起使用时,这些静态文件会很好地发挥作用:

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_dir上加载了/public,这意味着如果public_dir定义为public/website/,则必须执行http://127.0.0.1:3000/public/application.js才能访问位于/public/website/application.js的文件

09-25 17:12