2016-10-25 12 views
2

私は、角度ユニバーサルがまだ開発中であることを知っています。だから私は定期的に外部APIサーバーから(Httpサービスを介して約10秒ごとに)データを取得するWebアプリケーションのための角度ユニバーサルを使用することについて考えている。このデータはWebアプリケーションに表示されます。角度ユニバーサル+外部API

  1. 角度ユニバーサルは明らかにページをプリレンダリングするためにAPIサーバーからのデータを必要とします:

    私はまだのための簡単な解決策を見つけていないいくつかの問題に遭遇しています。私はWebアプリケーションのHTMLが要求されるたびにnodeJSからAPIサーバーを照会したくありません。 nodeJSサーバーが1つのクライアントWebアプリケーションインスタンスとまったく同じように振る舞い、10秒ごとにAPIサーバーに照会するだけで十分です。このデータを10秒間隔で「キャッシュ」し、HTMLをレンダリングするために使用します。

  2. クライアントWebアプリケーションは、APIサーバーからのデータをいくつかのプライベートメンバー変数に格納します。このメンバ変数は、ngFor、bindingsなどを使ってHTMLからHTMLを構築するために使用されますが、このメンバ変数は当初は空白/未定義です。私はクライアントアプリケーションが起動時にHTMLを消去することを望んでいません。これはAngular Universal(SEOではなく読み込み時間の短縮)のアイディアの一部を無効にするためです。

私がここで達成しようとしていることを理解していただければ幸いです。あなたはこれにアプローチする方法を知っていますか、それを行うための "公式の"方法さえありますか?私はそのようなことをやろうとしている唯一の人ではないと確信しています。

+0

をisNodeていないあなたを持っていますこれを解決する方法を見つけましたか? –

+0

@RaymondtheDeveloper残念ながら、 – Julian

+0

@Julianはこれに関する更新はありませんか? – Rakeschand

答えて

0

あなたのコードがサーバーコードであるかクライアントコードであるかを知ることはできません。あなたのアプリケーションを取り出し、サーバー上でレンダリングしようとします。あなたが言及したように、サーバがクライアントとは異なる動作をしたい時があります。例えば、あなたが必要とする機能を持っていて、Angular Universalがこのコード行を関数本体の先頭に置くことを望むならば。

if (typeof window === "undefined") return; 

それとも、あなたがクライアントとは異なる何かをするサーバに必要なシナリオを持っている場合は、この

if (typeof window === "undefined") { 
    // server code 
} else { 
    // client code 
}; 
+0

しかし、これは彼の質問の半分に答えるだけです。サーバー上でレンダリングされたデータをブラウザに渡す方法が必要だと思います。これは、サーバでデータを取得しているためで、ブラウザで再度取得しているためです。これは、より長い積載時間を意味する。あなたはこれを解決する方法を知っていますか? –

0

角度ユニバーサルは、2つの定数は、& IsBrowser

if(isNode){ 

    // it's Node Server 

} else { 
    //it's Browser 
} 
関連する問題