javascript - 通配符 * 响应所有请求的路由
问题描述
我有一个使用 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 请求?
解决方案
如果您在浏览器中进行测试,默认情况下所有请求都是“GET”请求,并且正如您所说,您的所有请求都是“POST”类型,因此请尝试使用 postman 或其他类似的 api 测试工具
推荐阅读
- ruby-on-rails - 基于点击事件远程提交简单表单
- python - Django:在 Azure 应用服务上找不到模块 - Azure DevOps CD
- javascript - 如何在音频/视频元素上捕获 FastForward 媒体键
- python-3.x - 从开始日期获取日期名称
- c# - aspnet-api-versioning : 如果在对 api 的调用中提供了错误的 Api 版本,为什么 api 返回 200 (ok)
- ruby-on-rails - Ruby 安装问题
- excel - 基于if条件限制Excel VBA中的设置范围
- javascript - 如何在jquery中设置提交按钮每个具有功能的选项卡?
- javascript - 无法理解为什么状态内的单个数组不起作用
- docker - Docker swarm 无法从 Dockerfile 正确构建