0

数日間の解決策を探しています。助けが必要。

ソース:node.js + express.js+jadeテンプレートエンジン

問題:1ページに1つ以上の動的ブロックをレンダリングする方法を理解できません。

例えば:

ページがあります:ニュースメインページページ上のブロック:最新ニュース(リスト20 itens)、ホットニュース(リスト4アイテム)、最も閲覧されたニュース(4アイテム)、ニュースカテゴリでブロック(ページに現在のカテゴリを表示できます選択したノベルティのカードが1つあるページなので、動的ブロックでもあります)、ユーザー認証データでブロックします。「ブロック」とは、コードのブロックではなく、サイトで確認できるウィジェットを意味します。

エクスプレスで何ができますか?ルート内の特別な関数に特別なURLをルーティングできます。したがって、ご覧のとおり、このすべてのブロックを1つのページにレンダリングする場合は、すべての関数を呼び出して、ルートの1つの関数のみに各ブロックをレンダリングする必要があります。

私はこのようなことをしなければならないようです(ライブラリでは確かですが、ここでは関係ありません)

    app.get('/ news'、function(req、res){
      call_last_news(funcion(){
        call_hot_news(function(){
          call_get_user_info(function(){
            ..。
            ..。
            ..。
            template.render.here();
            final_here();
          });
        });
      });
    });

これは本物のように見えますが、あまりにも役に立たず、サポートできないコードなので、..それは悪いことです。ページ上にいくつかのブロックをレンダリングするためのテンプレートエンジンからの呼び出しで解決策を見ることができます。ただし、すべてのブロックがデータベースまたはCookie、セッションデータなどを使用できるため、含めるだけではありません。すべてのブロックは動的です。しかし、express.js+jadeを使用してそのようなエンジンを作成する方法がわかりません

4

1 に答える 1

0

問題のすべてを理解したかどうかはわかりませんが、擬似コードに基づくと、ここでの主な懸念事項は、潜在的に独立した再利用可能な関数の深くネストされたセットがあることです。この問題には2つのアプローチがあります。

制御フローライブラリを使用する

非同期シリーズ、並列などを使用します(どの関数はコードの性質に依存しますか?すべてのcall_関数は独立していますか?)これにより、コードがクリーンアップされ、保守が容易になります。

ajaxを使用する

実行できるもう1つのアプローチは、すべての関数を使用せずにページをすばやくレンダリングしcall_、クライアントからいくつかのajax呼び出しを行ってデータを入力することです。'/ news / last'、'/ news / hot'などのようなルートを作成できます。これは、これらの各ユニットのすべてのロジックを再利用可能なURLに分離できるため、組み合わせて使用​​できるので便利です。任意のページでそれら。

于 2012-12-18T18:55:42.720 に答える