2016-08-07 6 views
0

В настоящее время я использую firebase хостинг для моей одной страницы React application. Я также добавил 404.html страница в мой общий каталог. Мое предположение заключалось в том, что эта страница будет обслуживаться, если пользователь вводит URL-адрес, который не находится на моих маршрутах (с использованием реактивного маршрутизатора), но нет возможности для firebase узнать, действительно ли URL-адрес или нет, или есть. В настоящее время, если я ввожу что-то случайное после/моего основного URL-адреса приложения, страница просто показывает пробел. Это что-то мне нужно учитывать в моем приложении React, если это так?Как пользоваться страницей 404 с использованием firebase хостинга для React SPA?

+1

Я ожидаю, что ваш firebase.json содержит «источник»: «**» 'rewrite, что означает, что вы переписываете все URL-адреса на свою главную страницу. Firebase Hosting не знает, что вы используете реактивный маршрутизатор, поэтому он не может обнаружить непревзойденный маршрут. Таким образом, вам придется добавить маршрут по умолчанию/улавливать в конфигурацию клиент-серверного взаимодействия. Это выглядит многообещающим: http://stackoverflow.com/questions/32128978/react-router-no-not-found-route –

+0

Любой код, который вы можете сообщить о том, как настроен ваш маршрутизатор? – KumarM

ответ

1

Вы можете позволить React Router заботиться о обслуживании страницы 404 на стороне клиента. Это, как вы можете настроить:

var NotFound = React.createClass({ 
    render: function() { 
     return (<h1>Page Not Found</h1>); 
    } 
}); 

var App = React.createClass({ 
    render: function() { 
     <Router history={browserHistory}> 
      <Route path="/" component={App}> 
       <Route path="first" component={SomeComponent}/> 
       <Route path="second" component={SomeOtherComponent}/> 
       <Route path="*" component={NotFound}/> 
      </Route> 
     </Router> 
    } 

}); 

Обратите внимание, что улов всех маршрутов (*) должен быть последним, так что React маршрутизатор может попытаться все другие, и, наконец, получить это.

Here's хорошая статья, которая объясняет это.

4

Вы можете частично решить эту проблему с помощью конфигурации firebase.json, но поскольку Firebase Hosting обслуживает только статический контент, вам придется обрабатывать некоторые логические элементы вашего JavaScript. Простой всеохватывающий выглядит следующим образом:

{ 
    "hosting":{ 
    "rewrites":[{"source":"**","destination":"/index.html"}] 
    } 
} 

Однако, вы можете создать более конкретные переписывает, чтобы соответствовать структуре маршрутов вашего приложения, например:

{ 
    "hosting":{ 
    "rewrites":[ 
     {"source":"https://stackoverflow.com/users/*","destination":"/index.html"}, 
     {"source":"/account","destination":"/index.html"}, 
     {"source":"/posts/*","destination":"/index.html"}, 
    ] 
    } 
} 

В приведенном выше примере, /users/foo бы путь к /index.html но /unknown/url будет маршрутизироваться до 404.html.

Вышеприведенная информация содержит информацию о ваших действительных данных приложения. Если /users/foo не является действительным именем пользователя, вам нужно будет отобразить не найденное сообщение с использованием JavaScript в /index.html.