reactjs - 无法使用 vertx 设置反应路由
问题描述
public class BackendVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
// tag::backend[]
Router router = Router.router(vertx);
router.get().handler(StaticHandler.create()); // <3>
vertx.createHttpServer()
.requestHandler(router)
.listen(8080);
// end::backend[]
}
// tag::main[]
public static void main(String[] args) {
Vertx vertx = Vertx.vertx(); // <1>
vertx.deployVerticle(new BackendVerticle()); // <2>
}
// end::main[]
}
我在https://how-to.vertx.io/single-page-react-vertx-howto/之后创建了带有顶点的反应应用程序。我已经使用 react-router 设置了反应路由,当我使用默认情况下在 localhost:3000 上运行的内部反应节点服务器时工作正常。但是当我通过 vertx 静态处理程序提供静态页面时,除了默认/路由其他路由返回“未找到” 在此处输入图像描述
解决方案
构建静态网站时,它包含在单个索引 HTML 文件中。
React Router 允许为特定视图创建路径。这些路径可以由 React Router 解释,但它们不会映射到后端服务器上的实际文件。
这就是为什么404 NOT FOUND
如果您尝试加载除/
.
要解决此问题,请将 Vert.x Web 路由器配置为StaticHandler
将无法加载的任何内容重新路由到/
:
// After you've setup the other routes
router.get().handler(StaticHandler.create());
router.get().handler(rc -> rerouteToIndex(rc));
private void rerouteToIndex(RoutingContext rc) {
if (!"/".equals(rc.normalisedPath())) {
rc.reroute("/");
} else {
rc.next();
}
}
推荐阅读
- java - 映射到 getter/setter 时,使用 GSON 从 POST 请求解析 json 时出错
- android - 无法加载库:dlopen 失败:找不到库“libboost.so”
- javascript - 为什么 Splunk 仪表板中的时间显示为“未定义”?
- ember.js - 有没有办法在 ember 车把模板中定义和迭代数组?
- python - 如何为数据框中的所有列绘制 Seaborn Distplots 矩阵
- javascript - 如何让分页和模态窗口都工作?
- office-ui-fabric - 我可以在非 Microsoft 内部应用程序中使用 Office UI Fabric React 吗?
- vb.net - Visual Basic - ReadOnly 属性中的日期格式
- c++ - 位成员倒序?
- c# - 如何使用 ASP.NET Webforms 在 DataRow 中呈现按钮?