首页 > 解决方案 > 通配符 * 响应所有请求的路由

问题描述

我有一个使用 Express.js 框架构建的工作 Node.js 应用程序。应用程序中的所有路线都是发布路线,即。

app.post('/login', function(req, res){
//do login validation
});

app.post('/AppHomepage', function(req, res){
//send user app dashboard
});
etc.

我遇到的一个问题是,如果用户输入了未定义的路线,例如。appdomain.com/thisroutedoesnotexist,它们将返回“无法获取 /thisroutedoesnotexist”

因此,我遵循了此答案中的建议:https ://stackoverflow.com/a/25216843并添加了

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

作为最后一条路线。这非常适合将未定义的请求重定向到索引页面并解决了这个问题。

但是,我发现在发出 LEGITIMATE 请求时也会调用此通配符重定向。IE。如果用户请求 /AppHomepage,两者

app.post('/AppHomepage', function(req, res){
//send user app dashboard
});

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

捕获并响应请求。用户确实获得了主页的正确 res.render,但是 index 路由中的 console.log 也正在打印,这意味着即使在 app.post('/AppHomepage') 路由之后,通配符路由也会捕获 /AppHomepage 请求拿起并提供了请求。

谁能破译为什么会发生这种情况?

编辑:

我现在知道,即使是浏览器的 POST 请求也将是一个 GET,这就是为什么 GET 通配符在重定向中起作用。

我现在的问题是有没有办法只重定向未定义的请求而不是所有 GET 请求?

标签: javascriptnode.jsexpressroutes

解决方案


如果您在浏览器中进行测试,默认情况下所有请求都是“GET”请求,并且正如您所说,您的所有请求都是“POST”类型,因此请尝试使用 postman 或其他类似的 api 测试工具


推荐阅读