具有Saga服务器端渲染重定向的React-router

时间:2017-06-14 15:55:03

标签: reactjs express react-router redux-saga ssr

问题是我有一个初始提取请求,它从URL获取查询字符串并发出请求以获取指定的产品页面。

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

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

在客户端,这非常简单,因为它可以使用browserHistorywindow.location.href动态重定向,但在服务器上,我必须传递res对象和使用res.redirect,并且可能使用这种方法使用两个不同的重定向函数。

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

有任何建议如何在正确性方面解决这个问题?我真的不希望路由逻辑在快速方面加倍,所以我宁愿用同构代码很好地处理它。

1 个答案:

答案 0 :(得分:0)

您可能正在暴露您的主要状态,以便通过前端代码获取。从sagas返回的任何调用都可以更新该状态。当redux saga没有返回我们想要的数据时,我们正在使用set301()return404: true个动作。触发这些操作,并在主状态对象中设置return301: true或{{1}}。因此,在将我们的应用程序渲染为字符串之前,我们检如果存在任何这些,我们将从服务器返回相关响应。