После много дней поиска угловой универсальный я обнаружил недостаток информации о том, как на самом деле работает ServerSideRendering .
Позвольте мне помочь вам разобраться в своих проблемах и прояснить некоторые размытые пятна.
Существует довольно много руководств, рассказывающих, как настроить ССР, с чем нужно быть осторожным, например, не получать доступ к DOM или не использовать jquery. Ни один из них на самом деле не показывает, как angular universal работает за кулисами, особенно когда вы обращаетесь к внешнему api.
Я ожидал, что обычное приложение SSR просто запустится на сервере, создаст некоторый html, а затем загрузит html, пока клиент не загрузит код javascript. Но что происходит в случае использования внешний API? (Что является очень распространенным сценарием). Делает ли серверная версия нашего приложения реальные вызовы, возвращая реальные данные из api для рендеринга с помощью html? Или еще что-то происходит?
Также в случае внешнего API, который вызывается через преобразователь маршрута. Возможно ли в этом случае SSR? Это означает, что наше приложение в любом случае должно ждать ответа api.





При использовании angular universal процесс SSR фактически сгенерирует html, который загрузит браузер, с некоторым встроенным CSS, чтобы страница отображалась быстро. После этого браузер загрузит файлы JS для вашего приложения angular, и на этом этапе происходит переход, после которого клиентское приложение JS берет на себя управление.
Вы можете использовать внешние API. Если у вас есть вызов API в коде angular (например, при инициализации компонента), то этот вызов будет выполняться на стороне сервера; означает, что angular universal будет ждать завершения этого вызова, чтобы использовать полученные данные для создания html страницы
Предварительный рендеринг в основном полезен, если ваш контент не меняется очень часто (при его изменении вы должны удалить кешированные файлы html)
Есть ли способ использовать учетные данные браузера, такие как {withCredentials: true}, для этого API на стороне сервера? Мы обычно получаем просто 403.
почему это не мой случай? Я делаю вызовы API в init и жду наблюдаемого, но html не отображается, когда вызов заканчивается ...
Также убедитесь, что вызывается тот же API.
Это разные маршруты:
Итак, в этом случае вы можете использовать prerender, чтобы универсальный ответ api prerenders?