0

Swig をテンプレート エンジンとして Express 3.0 を使用して NodeJS アプリを開発しています。私が達成したいのは、レンダー引数を次のルートに渡すことです。サイトのすべてのページに特定のサイト コンポーネント (サイドバー、ナビゲーション バー、フッターなど) が存在するため、これが必要です。これらのコンポーネントのそれぞれに、オンとオフを切り替えるウィジェットとリンクがあります。現在、これらのウィジェットを切り替えるために次のことを行っています。

response.render('network.html', {
  activeTab: 'network',
  username: request.session.username,
  bread_current: 'Network',
  page_title: 'Your Network',
  page_subtitle: 'Mordrum',
  widgets: {
    navbar: {
      chats: {
        enabled: true,
        color: 'blue',
        icon: 'chatbubble'
      }, messages: {
        enabled: true,
        color: 'red',
        icon: 'mail'
      }, users: {
        enabled: true,
        color: 'green',
        icon: 'person'
      }
    }
  }
})

そこ (widgets オブジェクト内) には多くの引数があり、コード内で (ルートごとに 1 回) 何度も繰り返すことになります。引数を次のルートに渡す方法があるかどうか疑問に思っていました。

4

2 に答える 2

2

データが静的 (アプリの実行中に変化しない) の場合は、 を使用app.localsして保存します。そこに保存されているデータは、すべてのテンプレートで自動的に利用できるようになります。

app.locals.widgets = {
  navbar: {
    chats: {
      enabled: true,
      color: 'blue',
      icon: 'chatbubble'
    }, messages: {
      enabled: true,
      color: 'red',
      icon: 'mail'
    }, users: {
      enabled: true,
      color: 'green',
      icon: 'person'
    } 
  }   
}; 

データ変更された場合は、res.locals代わりに使用してください。そこに保存されたデータは、任意のテンプレートでも使用できますが、単一の要求の存続期間中のみです。どのミドルウェアもそれにアクセスできます (必要に応じて変更できます)。

于 2013-11-30T12:40:33.590 に答える