Node.js/Expss.js.如果与通配符路由器一起使用,则无法识别静态路由器

Node.js / Expess.js. Static router not recognized if used with wildcard router

本文关键字:路由器 js 静态 识别 一起 Expss 如果 Node 通配符      更新时间:2023-09-26

当我只将此路由与所有其他路由一起使用时,静态文件服务良好:

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 的文件