【问题标题】:Serving a static html page from a single page react app with react router使用反应路由器从单页反应应用程序提供静态 html 页面
【发布时间】:2017-04-19 20:23:57
【问题描述】:

我有一个反应单页应用程序,并且正在考虑在用户未登录的情况下提供静态 html、SEO 友好的登录页面。我希望所有搜索引擎都可以浏览该页面(网站的其余部分受 SEO 密码保护,这无关紧要。 我正在使用反应路由器,如果应用程序发现用户未登录,则无法在应用程序中将用户重定向到静态 html 文件(因此将在服务器端提供服务)。 有什么建议么?谢谢!

【问题讨论】:

  • 你能分享一些你正在使用的代码或示例吗?
  • 我想做这样的事情:function requireAuthHome(nextState, replace) { if (LoginStore.isLoggedIn()) { replace({ pathname: 'feed', state: {nextPathname: nextState.location.pathname} }) } else browserHistory.push(‘/index.html’); } 其中 index.html 是应用程序外部的一个简单的 html 文件。这有意义吗?

标签: reactjs react-router


【解决方案1】:

这是您可以在服务器上的路由器中执行的操作。你不能在你的 React 应用程序中这样做,因为这违背了提供无 JS 内容的目的(因为你将使用 JS 来传递“静态”内容)。

如果您还没有使用路由器设置服务器,则需要一些时间。但是一旦你这样做了,简单地检查一下路线就足够了。

// in hapijs, for example:

handler(request, reply) {
   if (isAuthenticated(request)) {
     reply.view('dashboard')
   } else {
     reply.view('static_page')
   }
}

【讨论】:

  • 感谢您的回复。不,我没有带路由器的服务器设置,因为该应用程序主要是纯粹的前端 - 我只是用 nginx 为 js 提供服务。关于获得该设置的最简单方法的任何建议?我对 SPA 还很陌生,只需要填写这个基本用例。谢谢!
  • 作为旁注 - 该应用程序主要是构建的并且不是同构的 - 我知道我可能应该这样做,但此时已经工作了 6 个月并且不想要如果可能的话,必须使整个服务器端呈现(除非我弄错了,否则你的建议是什么?)。谢谢!
  • 如果您希望服务器呈现 HTML,您将需要某种服务器。如果您想基于提供 JS 或静态内容的授权做出决定,您将需要一个服务器。也许您可以摆脱 Amazon 的 lambda 服务(无服务器架构)。如果没有这些,我建议始终提供一个静态标记且独立于您的 React 应用程序的主页,并从其他 URL 提供您的 React 应用程序。但是正如我上面提到的,是否使用浏览器的JS并没有办法在浏览器的JS中做出决定。这有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2017-04-21
  • 2020-09-01
  • 2018-10-05
  • 2020-01-26
相关资源
最近更新 更多