当前位置: 首页 > 知识库问答 >
问题:

如何使用带有Quarkus的Vertx路由器将所有未找到的路由重定向到index.html?

齐俊贤
2023-03-14

我有一个Quarkus应用程序,它都包了一个角水疗(捆绑在罐子里)。Quarkus提供后端API路由供前端使用。在构建Quarkus应用程序时,将Angular应用程序构建复制到目标中的META-INF/resources路径。

我没有使用JAX-RS来注册路由。相反,我直接在Vertx路由器上的Fun onRouterReady(@observes router:router)方法中以编程方式注册它们。

我希望任何不被识别的路由(无论是作为Vertx注册的路由还是静态资源)被重新定向到index.html,以便我的Angular应用程序可以从其所有路由加载。不幸的是,我还没有找到任何方法来做到这一点。

我不知道所有的Quarkus路线是如何运作的。我怀疑Quarkus本身正在使用servlet(或者Vertx)注册一些路由,因为index.html在根目录上有正确的服务,但是我的身份验证根目录可以在没有身份验证的情况下阻止加载。

router.route("/*").handler(StaticHandler.create())
router.route().handler({ context: RoutingContext ->
    context.reroute("index.html)
})

这里的想法是创建一个静态处理程序,然后是一个catch-all,该catch-all将请求重写到index.html,这样它就会被静态处理程序捕获,但这只会导致一个无限循环(静态处理程序似乎无法找到index.html)。

我还尝试通过JAX-RS添加过滤器(我希望避免),但这也不起作用。

一定有一些方法来设置这个,我确信Quarkus代码确实在某个地方做了,但我找不到它。任何想法都很感激。

共有1个答案

夹谷阳夏
2023-03-14

您需要在应用程序作用域类的某个地方观察router并设置404错误处理程序以重定向到index.html

public void init(@Observes Router router) {
        router.errorHandler(404, routingContext -> {
            routingContext.response().setStatusCode(302).putHeader("Location", "/index.html").end();
        });
}

P.S.使用routingcontext.reroute(“index.html”);也可以工作,但它将保持路径原样(例如,您编写了/testabc,它将显示html文件,但路径不是/index.html)。如果您确实需要这个,那么用ErrorHandler中的选项替换它

 类似资料:
  • 问题内容: 我正在制作Angular + NestJS应用,我想发送所有路线的文件。 主要 应用控制器 打开时它工作正常,但是如果打开,服务器随即提示。我一直在搜寻为什么我会收到此错误,而所有人都说,但是我不想使用某些引擎,我只想发送由angular构建的纯html,而不会像hack一样。请帮忙 问题答案: 您只能使用并与像车把(HBS)视图引擎; 用于提供静态文件(角度),但是,您只能使用和。

  • 我正在尝试使用react router(版本^1.0.3)做一个简单的重定向到另一个视图的操作,我只是觉得有些累。 我只需要将用法发送到“/login”,就这样。 我能做什么? 控制台中的错误: 未捕获的引用错误:未定义PropType 用我的路线归档

  • (以防你看过我的上一个问题:不要混淆问题的第一部分/引言是相同的。最后的问题是不同的:) 我正在使用Symfony 2.8开发一个WebApp项目。我想在页面中添加不同的语言。根据用户的区域设置,所有路由/url应从更改为/locale/some/url

  • 在以下React应用程序中,有两个路由URLhttp://myapp 正确布线到布局构件。但是,URLhttp://myapp/login 也路由到布局组件,而不是登录。如果我将path=“/login”更改为“/sign”,它将正确路由到登录组件。 React路由器中的“/login”路径将其路由到路由是否有特殊之处?或者我设置这个路由的方式有错误吗?

  • 我试图重定向路由从控制器函数后,在Laravel 5.4表单提交过程中,如下面的链接所说 https://laravel.com/docs/5.4/redirects#redirecting-命名路线 路线; 控制器; 当我试图重定向我得到这个错误。 InvalidArgumentExcema在UrlGenerator.php304行:路由[配置文件]未定义。 关于重定向,我已经搜索了好几次,但都