问题是我有一个初始提取请求,它从URL获取查询字符串并发出请求以获取指定的产品页面。
在客户端和服务器端使用相同的逻辑和路由。
API请求在redux-saga
中执行,但是当它失败时(没有匹配的产品),该网站已经在/product
路由上,因此需要重定向。
在客户端,这非常简单,因为它可以使用browserHistory
或window.location.href
动态重定向,但在服务器上,我必须传递res
对象和使用res.redirect
,并且可能使用这种方法使用两个不同的重定向函数。
另一个解决方案是以最顶级的方式抓住这个问题; on ReactDOMServer.renderToString(component)
期间的express index.js,以及失败时的客户端端点 - 具有不同的逻辑。例如,带有快速重定向的404视图。但是,因为saga
不是层次结构中最顶层的,所以抛出这个404并将其捕获到最上层的上下文(快速服务器)需要以非常“脏”的try / catch方式向上和向上传递它。
有任何建议如何在正确性方面解决这个问题?我真的不希望路由逻辑在快速方面加倍,所以我宁愿用同构代码很好地处理它。
答案 0 :(得分:0)
您可能正在暴露您的主要状态,以便通过前端代码获取。从sagas返回的任何调用都可以更新该状态。当redux saga没有返回我们想要的数据时,我们正在使用set301()
和return404: true
个动作。触发这些操作,并在主状态对象中设置return301: true
或{{1}}。因此,在将我们的应用程序渲染为字符串之前,我们检如果存在任何这些,我们将从服务器返回相关响应。