投稿を共有してくれてありがとう-それは素晴らしいものです(そして私にとって非常にタイムリーです)。
あなたは実際に2つの質問をしています-1)クライアントとの対話なしでhtmlクライアント側をレンダリングするためにデータをロードする方法と2)ユーザーが実際にルートを要求したときに静的ファイルをブラウザに送信する方法。
ユーザーの操作なしでページをレンダリングし、クライアントMVCで私の¢2
1)ページがロードされた後にページをレンダリングするには、すべての初期化/データロード/レンダリングコードを実行する必要があります。クライアントでjQueryを使用する場合(ほとんどのWebアプリケーションと同様):
$(document).ready(function(){
// Your code here
});
jQueryドキュメントからコピーされただけです。
ほとんどの人は、バックボーン/アンダースコアを使用してクライアントにMVCレイヤーを構築します。これを行うには、より洗練された(そして一見より強力な)クライアント側フレームワークがたくさんありますが、このカップルは、オプションを制限したり、ある時点で間違いなく必要になる柔軟性を低下させたりすることなく、十分なパワーを提供します。アンダースコア(とにかくバックボーンの依存関係です)に加えて、多くの非常に便利な関数(1ページのマニュアル全体を読むのに1時間費やすと、JavaScriptで何ができるかに驚くでしょう)には、一見シンプルで同時にある独自のテンプレートがありますテンプレート内ですべてのJavaScriptを実行するだけなので、非常に強力な時間です。
通常、テンプレートにアプリケーションロジックを含めることは悪いことですが(アンダースコアが許可され、ほとんどのより洗練された「より強力な」テンプレートエンジンは許可されないため)、テンプレートにロジックを追加できる方が非常に便利で、はるかに優れています。多くのアプリケーションロジックを再設計したり、テンプレートを追加したりするよりも、(よくあることですが)狭い場所にいることに気付いたとき。
また、ここで書いたように、require.jsやその他のモジュールローダーを(実際に使用する必要があるまで)使用しないようにすることも私の意見です。
任意のルートに静的HTMLを提供し、node-as-apiのnginx構成を提供します
2)同じ静的htmlファイル(または複数のルート依存htmlファイル)で応答するには、すべてのルートへの要求を書き換える必要があります。設定やアプリケーションの要件に応じて、本文が空のファイル(この場合、データが読み込まれ、ページが本文にレンダリング/挿入されるまで、ユーザーには空白のページが表示されます)、ウェルカムページ、またはテンプレートページが表示されます。データの代わりに、スピニングホイールが表示されます。
リクエストを書き換える方法は、静的コンテンツの提供とリクエストのプロキシに使用するWebサーバーによって異なります。Apacheを使用する場合(同期であるため、Nodeでの選択はほとんどありません)、.htaccessファイルを使用する必要があります。ノードを使用するほとんどの人が行うようにNginxを使用する場合は、以下の例のように、構成ファイルのサーバーブロック内でrewriteディレクティブを使用する必要があります。
server {
listen 80;
server_name example.com;
root html/example;
access_log logs/example.log;
# location block below sends specific static assets from inside your app's
# public directory when routes /img, /js, /css, /views are requested
location ~ /(img|js|css|views)/ {
rewrite ^(.*)$ /public/$1 break;
}
# location block below proxies all data requests (/api route) to your node app
location /api {
proxy_pass http://localhost:3000/;
proxy_redirect http://localhost:3000/ http://example.com;
proxy_connect_timeout 30s;
proxy_read_timeout 30s;
proxy_cookie_domain localhost example.com;
#proxy_http_version 1.1;
}
# location block below rewrites all other routes to a specific html file
# that is sent to the client and that is supposed to load all JS and
# static assets to render a page
location / {
rewrite ^(.*)$ /public/app.html;
}
}
クライアントでページをレンダリングする方法(およびサーバーに要求するデータ)は、ユーザーが要求したルート(javascriptでアクセス/変更できるほか、Cookieを設定/アクセス/変更できるルート)によって異なります。 )。アプリケーション内のすべてのナビゲーション(ユーザーがボタンまたは内部リンクをクリックすると、すべてのクリックイベントをキャッチする必要があります)は、既にロードされているページまたは静的アセットに対する追加のリクエストなしで実行され、データリクエストのみがサーバーに送信されます。
お役に立てば幸いです。
SEOアップデート
nginxの推奨構成は、ロボットによってインデックスが作成され、Facebookなどの静的HTMLを必要とする他のWebアプリに表示されるページが必要ない場合にのみ適しています。たとえば、インデックスを作成するページの場合、条件を追加する必要があります。ロボットからのリクエストを異なる方法でルーティングし($ http_user_agentに基づく)、それらのルートの静的htmlをレンダリングします。ただし、純粋にセマンティックなHTMLとは異なる場合があります(より小さく、デザインイメージ、レイアウトdiv /クラス、UI要素、およびクロールロボットやWebアプリからのリクエストを減らすためのjavascriptがありません)。