5

所以我正在开发一个需要以下路径的链接的网站:

localhost:3000/visit/:name

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

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

路由.js

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

服务器.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。如果是这种情况,它将重定向到目的地。这行得通。

然而,我现在面临的问题是,我有数百个附属链接,具有不同的 URL,每个链接都有相应的 slug。

以编程方式为正确的 slug 输入正确 url 的最佳方法是什么?在路线中,我可以提供道具

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

我可以从 server.js 访问它,但我不确定如何根据 slug 使那个动态。

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

或者有没有一种方法可以将道具从用于单击链接的组件传递给 Route?IE

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

任何帮助深表感谢

4

0 回答 0