2017-06-14 124 views
0

问题是我有一个初始获取请求,它从URL获取查询字符串并发出请求以获取指定的产品页面。带佐贺服务器端渲染重定向的反应路由器

在客户端和服务器端使用相同的逻辑和路由。

API请求在redux-saga中执行,但是当它失败时(没有匹配的产品),该站点已经在/product路由上,因此需要重定向。

在客户端,这是很容易的,因为它可以动态使用browserHistory或只是window.location.href被重定向,而是在服务器上,我将不得不向下传递的res对象,并使用res.redirect,可能的话,使用两种不同的用这种方法重定向函数。

另一种解决方案是以最高级的方式捕捉这个;在ReactDOMServer.renderToString(component)期间的express index.js上,以及客户端端点在失败时 - 具有不同的逻辑。例如,具有快速重定向的404视图。但是,因为saga不是最上层的,所以抛出这个404并将其捕获到最上层的上下文(express服务器)中需要以非常“肮脏”的try/catch方式来传递它。

任何建议如何解决在正确性方面?我真的不希望路由逻辑在快速方面翻倍,所以我宁愿用同构代码来处理它。

回答

0

您可能正在暴露您的主要状态被前端代码拾取。从sagas返回的任何电话都可以更新该状态。我们正在使用set404()set301()行动时,REDX传奇没有返回我们想要的数据。这些动作被触发,并在主状态对象中设置return404: truereturn301: true。所以在呈现我们的应用程序字符串之前,我们检查该对象。如果存在这些中的任何一个,我们将返回来自服务器的相关响应。