Перенаправление React-Router через сервер

Поэтому я работаю над сайтом, который хочет ссылки по следующему пути:

localhost:3000/visit/:name

Для перенаправления на внешний URL-адрес, например, google.com?affiliateID=2. Редирект должен быть nofollow с кодом состояния 307.

Приложение универсально; рендеринг на стороне сервера с использованием экспресс-реакции и реакции на стороне клиента, оба используют общие маршруты через реагирующий маршрутизатор.

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")
  }
 })
})

здесь я проверяю, является ли запрошенный маршрут /visit/slug, проверяя состояние, 307. Если это так, он будет перенаправлен к месту назначения. Это работает.

Однако сейчас я борюсь с тем, что у меня есть сотни партнерских ссылок, с разными URL-адресами и с каждым слагом.

Каков наилучший способ программно ввести правильный URL для правильного слага? В маршруте могу дать реквизит

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

к которому я могу получить доступ из server.js, но я не уверен, как сделать этот динамический в зависимости от слаг.

Или я должен выполнить API-вызов к базе данных на server.js, в которой есть все слагы и их соответствующие URL?

Или есть способ, которым я могу передать реквизит в Маршрут из компонента, который используется для перехода по ссылке? Т.е.

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

Любая помощь высоко ценится

0 ответов

Другие вопросы по тегам