Угловой универсальный + внешний API
Я знаю, что Angular Universal все еще находится в разработке. Поэтому я подумал об использовании Angular Universal для веб-приложения, которое регулярно извлекает данные с внешнего сервера API (примерно каждые 10 секунд через службу Http). Эти данные затем отображаются в веб-приложении.
Я столкнулся с несколькими проблемами, для которых пока не нашел простого решения:
- Angular Universal, очевидно, нужны данные с сервера API для предварительной визуализации страницы. Я не хочу запрашивать сервер API у nodeJS каждый раз, когда запрашивается HTML веб-приложения. Было бы достаточно, если бы сервер nodeJS "вел себя" точно так же, как один экземпляр клиентского веб-приложения, и тоже каждые 10 секунд запрашивал сервер API, "кэшировал" эти данные с интервалами в 10 с и использовал их для визуализации HTML.
- Клиентское веб-приложение хранит данные с сервера API в некоторой закрытой переменной-члене. Затем эта переменная-член используется для построения HTML-кода с помощью ngFor, привязок и т. Д. Но эта переменная-член в начале, конечно, пуста / не определена. Я не хочу, чтобы клиентское веб-приложение при запуске стирало предварительно обработанный HTML-код, потому что это отчасти отразило бы некоторые идеи Angular Universal (не SEO, но сократило время загрузки).
Я надеюсь, вы понимаете, чего я пытаюсь достичь здесь. У вас есть идея, как к этому подойти, или есть даже "официальный" способ сделать это? Я уверен, что я не единственный, кто пытается сделать что-то подобное.
2 ответа
У Angular Universal есть две константы isNode и IsBrowser
if(isNode){
// it's Node Server
} else {
//it's Browser
}
Angular Universal не знает, является ли ваш код серверным или клиентским кодом, он просто берет ваше приложение и пытается отобразить его на сервере. но, как вы упомянули, есть время, когда вы хотите, чтобы сервер работал не так, как клиент. Например, если у вас есть функция, которую вы хотите, чтобы Angular Universal пропустил, поместите эту строку кода вверху тела функции.
if (typeof window === "undefined") return;
Или, если у вас есть сценарий, который вам нужен на сервере, чтобы сделать что-то отличное от клиента, сделайте это
if (typeof window === "undefined") {
// server code
} else {
// client code
};