【问题标题】:Undertow ResourceHandler to return the same file when a path cannot be foundUndertow ResourceHandler 在找不到路径时返回相同的文件
【发布时间】:2019-03-05 15:27:01
【问题描述】:

我正在使用undertow 静态地为反应单页应用程序提供服务。为了使客户端路由正常工作,我需要为服务器上不存在的路由返回相同的索引文件。 (为了更好地解释问题click here。)

目前使用以下 ResourceHandler 实现:

ResourceHandler(resourceManager, { exchange ->
    val handler = FileErrorPageHandler({ _: HttpServerExchange -> }, Paths.get(config.publicResourcePath + "/index.html"), arrayOf(OK))
    handler.handleRequest(exchange)
}).setDirectoryListingEnabled(false)

它有效,但它很hacky。我觉得一定有更优雅的方式来实现这一点?

【问题讨论】:

    标签: reactjs kotlin undertow


    【解决方案1】:

    我在 undertow 文档中找不到我需要的东西,我不得不使用它来找到解决方案。该解决方案适用于嵌入式 Web 服务器,因为这正是我所寻求的。我试图为带有路由的 Angular 2+ 单页应用程序执行此操作。这就是我得出的结论:

    masterPathHandler.addPrefixPath( "/MY_PREFIX_PATH_", myCustomServiceHandler )
        .addPrefixPath( "/MY_PREFIX_PATH",
            new ResourceHandler( new FileResourceManager( new File( rootDirectory+"/MY_PREFIX_PATH" ), 4096, true, "/" ),
                new FileErrorPageHandler( Paths.get( rootDirectory+"/MY_PREFIX_PATH/index.html" ) , StatusCodes.NOT_FOUND ) ) );
    

    这是它的作用:

    • “myCustomServiceHandler”为服务器端逻辑提供处理程序以处理发送到服务器的查询
    • “ResourceManager/FileResourceManager”提供位于应用程序 (Angular) 根路径中的文件
    • 如果查询是针对客户端路由路径而不是真实文件,则“FileErrorPageHandler”会提供应用程序的“index.html”页面。它还会在出现错误文件请求时提供此文件。

    注意第一个“MY_PREFIX_PATH”后面的下划线“_”。我想让应用程序 API URL 与 Web 路径相同,但没有额外的逻辑,我选择了下划线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2013-12-30
      • 1970-01-01
      • 2018-07-08
      相关资源
      最近更新 更多