【问题标题】:Configuration changes in dropwizard application to work with react browserHistorydropwizard 应用程序中的配置更改以与 react browserHistory 一起使用
【发布时间】:2018-01-15 13:18:35
【问题描述】:

我有一个react 应用程序在dropwizard 服务器上运行。 bundle.js 在 /ui 上提供。当我在 /ui 上打开 url 并导航应用程序(并转到 /ui/content)时,它工作正常。但是当我尝试刷新像 /app/content 这样的特定页面时,它会给出一个404

我知道客户端渲染和服务器端渲染,而且我需要对 /ui 进行GET 调用并将其余部分路由到客户端,但我找不到任何文档说明如何在dropwizard

我也知道使用 hashHistory 代替 browserHistory 会起作用(因为 url 的哈希部分不会发送到服务器),但我想知道这是否可以通过 browserHistory 完成。

有关于如何配置express 服务器的文档,但我找不到jetty/dropwizard 的任何内容。

【问题讨论】:

    标签: java react-router react-redux dropwizard browser-history


    【解决方案1】:

    在 Dropwizard 级别,您可以使用一个使用 servlet 过滤器来重写 URL。一种流行的实现是Tucky UrlRewriteFilter。您可以按如下方式实现它:

    1. 向 Dropwizard 注册过滤器:

      @Override
      public void run(ExampleConfiguration configuration, Environment environment) {
          FilterRegistration.Dynamic registration = environment.servlets()
                  .addFilter("UrlRewriteFilter", new UrlRewriteFilter());
          registration.addMappingForUrlPatterns(null, true, "/*");
          registration.setInitParameter("confPath", "urlrewrite.xml");
      }
      
    2. urlrewrite.xml 配置文件添加到您的src/main/resources,添加重写规则

      <urlrewrite>
          <rule>
              <from>^/(?!(api|static/|manifest\.json|assets-manifest\.json|favicon\.ico)).*$</from>
              <to type="forward">/index.html</to>
          </rule>
      </urlrewrite>
      

      上述规则规定,如果请求路径与上述正则表达式匹配,则将请求转发到index.html文件。我曾经测试的是create-react-app,其中的输出是匹配器中列出的一些文件。这些文件不应转发。

      正则表达式使用负前瞻,所以它就像一个否定。看起来我的意思是如果路径与这些文件匹配,则向前,但实际上恰恰相反。如果您没有使用 create-react-app,那么您的正则表达式看起来会有所不同。关键是否定你不想转发的文件。

    我整理了一个工作演示。查看GitHub repo

    【讨论】:

    • 这行得通。谢谢。有没有办法从 app.yml 而不是配置文件中获取它?
    • 我想不到。
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2017-07-07
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多