Nginx/angular/node.js корневой URL с prerender.io

У нас есть angular SPA, используя node, nginx и prerender.io. Наша домашняя страница задана как уникальный URL-адрес (например, www.foo.com/bar), и в нашей маршрутизации эта домашняя страница фиксирует перенаправление по умолчанию всех корневых URL-адресов, специально не направленных в противном случае.

Наша проблема заключается в следующем: корневой URL-адрес www.foo.com или www.foo.com/возвращается с пустой страницей для Google и Facebook. Наш индекс является основным шаблоном ng-include, в который все страницы вставлены внутри, поэтому имеет смысл, что наш корневой url возвращается без какого-либо реального содержимого тела html. Основной html в индексе:

<div class="st-content">
  <div ng-view="" class="main-content" id="mainView"></div>
  <div ng-include="'/views/footer.html'"></div>
</div> 

Кроме того, мы пробовали другие решения без положительных результатов:

  • базовый тег в заголовке индекса, ссылающийся на '/', который ничего не сломал... он также не разрешил его
  • 307 перенаправление, нет результатов
  • Конфигурации nginx выглядят хорошо

Примечание: при написании этого вопроса мне пришло в голову изменить домашнюю маршрутизацию на '/':

.when('/', {
    templateUrl: '/views/foo-bar.html',
    title: ‘Foo Bar',
    pageDescription: ‘Lorem Ipsum Foo Bar'
})
    .
    .
    .
.otherwise({
    redirectTo: '/'
});

Если изменить на это, то домашняя царапина покажется пустой? Разве это в основном не такая же проблема с перенаправлением js, но с меньшим количеством символов?

Ответ 1

Вам нужно установить переменную window.prerenderReady. Таким образом, поставьте это в свой контроллер маршрута:

window.prerenderReady = false;

... и это в вашей функции обратного вызова успеха контроллера:

window.prerenderReady = true;