2017-10-31 8 views
1

変数をテンプレートに渡すことを試みていますが、単一ページで機能するようになっていますが、その結果にアクセスする方法を見つける必要があります任意のページ。その理由は、それがテンプレートの一部であるサイドバーに必要であるということです。すべてのページからクエリ結果にアクセスできるようにする方法

マイテンプレートは明らかに私の実際のコードだけでなく、sudoのコードで、

include header 

include sidebar 

content 

include footer 

です。

私は含める必要があるクエリは次のとおりです。

Item.count({"author.id":req.user.id}, (err, itemCount)=>{ 
if(err){ 
    console.log(err); 
} else { 
    var Count = JSON.stringify(itemCount); 
    // somehow I need to store Count to be accessible inside my sidebar 
} 
}); 

私は私が取ると、それぞれ、すべてのルート内のクエリを置くが、私はログインしているユーザーのみのためにそれを行うことができる方法がある可能性があることを知っているとミドルウェアかそれとも何かに置くか?

私は現在、それぞれのルートに格納していますが、DRYコードではないことを知っています。また、50個以上のルートを処理しているため、更新が大変です。

私の典型的なルートは以下のとおりです。

// dashboard 
    app.get('/dashboard', 
    setRender('dashboard/index'), 
    setRedirect({auth: '/login'}), 
    isAuthenticated, 
    (req, res, next) => { 

    }, 
    dashboard.getDefault); 

答えて

0

あなたはその目的のためのミドルウェアを使用することができ、すなわち:

app.use('*', (req, res, next) => { 
    Item.count({"author.id":req.user.id}, (err, itemCount)=>{ 
     if(err){ 
      console.log(err); 
      res.status(500).send(err); 
     } else { 
      req.Count = JSON.stringify(itemCount); 
      next(); 
     } 
    });  
}); 

すべてのルートでクエリを実行し、req.Countに結果を保存すること。特定のルートセットでのみ実行する場合は、一致させるパスを'*'部分に変更します。また、isAuthenticatedのような他のミドルウェア関数を独自のapp.use句に抽出して、注文をより正確に管理できるようにすることもできます。

+0

テンプレートにアクセスするには、swig/twigの構文である '{{Count}}'を実行してください。それを含めると、それは別のファイルになるか、または単に私のapp.jsファイルの中に入れられますか? 'isAuthenticated'を変更しますか? isUnauthenticated = require( './ミドルウェア/ auth')。isUnauthenticated; 'その後、var名を後で含むことは、それ自身のミドルウェアです。どのようにそれを行うためのそれではないですか? – Kirbytech

+0

同じ 'app'を参照している限り、どこでも好きな場所に置くことができます。app.jsは動作する必要があります。あるいは、別のjsファイルに関数を書き込んでそこに書き出し、app.jsでコール。認証ミドルウェアに関しては、単なる提案で、 'app.use( '*'、isUnauthenticated)'を実行して同じことを達成でき、すべてのルートで宣言する必要はありません。 – ruedamanuel

+0

今後1〜2週間で私のルートをやり直すと、そのことを覚えておいてくれます。彼らは大きな見直しが必要です。ファイルは1800行以上あり、その中にすべてのルートがあります。最初からそれを分けないように私のあまりにも愚かな道。 – Kirbytech

関連する問題