React-Router重定向到服务器

时间:2016-08-04 16:32:04

标签: reactjs react-router react-dom-server

因此,我正在一个需要以下路径链接的网站上工作:

localhost:3000/visit/:name

要重定向到外部网址,例如google.com?affiliateID=2。重定向需要为nofollow,状态代码为307。

该应用程序是通用的;使用express& amp;服务器端渲染客户端做出反应,都是通过react-router使用共享路由。

routes.js

<Route status={307} path="visit/:slug" />

server.js

app.use((req, res) => {
  match({routes, location: req.originalUrl}, (err, redirectLocation, renderProps) => {
   if (err) {
    res.status(500).send(err.message)
   } else if (redirectLocation) {
    res.redirect(302, redirectLocation.pathname + redirectLocation.search)
   } else if (renderProps) {
    const html = renderToString(<RouterContext {...renderProps} />)

    const isAffiliateLink = renderProps.routes.filter((route) => {
     return route.status === 307
    }).length > 0

   if (isAffiliateLink) {
    return res.redirect(307, "http://google.com")
   }

   const markup = renderToStaticMarkup(<Document html={html} />)

   res.status(200).send("<!DOCTYPE html>" + markup)
  } else {
    res.status(404).send("Not Found")
  }
 })
})

这里我通过检查状态307来检查所请求的路由是否是/ visit / slug。如果是这种情况,它将重定向到目的地。这很有效。

我现在面临的困难是,我有数百个联盟链接,不同的网址,每个都有相应的slug。

以编程方式为正确的slug输入正确的url的最佳方法是什么? 在路线我可以给一个道具

<Route path="/visit/:slug" url="url.com" />

我可以从server.js访问,但我不知道如何使那个动态取决于slug。

或者我应该对server.js上的数据库进行API调用,该数据库包含所有slug及其相应的URL?

或者有没有办法可以从用于点击链接的组件中将道具传递给路径?即

<AffiliateLink slug={slug} url={url} />

非常感谢任何帮助

0 个答案:

没有答案