2017-03-01 4 views
0

私はnodejsを使用しています。私は現在mongodbにあるデータを使用して構築されたナビゲーションメニューを持っています。リストを取得するためにデータベースを呼び出していますそれを各ルートの中に戻します。この情報をローカルストレージクライアント側に格納する方法はないようです。だから私は、「このような状況に対処するための最も効果的な方法であるか疑問に思うメートル私のコードのサンプルをすべてのページで必要なデータを取得する効果的な方法

admin.get('/', function(res, resp){ 
    mongodb.connect(url, function(err, db){ 
     var collection = db.collection('companies') 
     collection.find({}).toArray(function(err, companies){ 
      res.render('adminview', {companies:companies})//once the page is rendered I would like to save the company list to localstorage. 
     }) 
    }) 
}) 
admin.get('/:company', function(res, resp){ 
/* repeating code from above because I need this list */ 
    mongodb.connect(url, function(err, db){ 
     var collection = db.collection('companies') 
     collection.find({}).toArray(function(err, companies){ 
      /* more code to do stuff to render the company page */ 
      res.render('companyadminview', {companies:companies, company:company}) 
     }) }) 

私はこのことについて、私はWeb開発に新たなんだ、間違った道を行くことができが、この私に間違って感じていることができますが、 「tは別の方法を考え出す。

+1

*ありdoesnのこの情報をローカルストレージクライアントの側に保存する方法であるようです。* wut –

+0

@KevinBクライアント側でデータを保持できるlocalStorageというものがあります。詳しくはhttps://www.w3schools.comを参照してください。 /html/html5_webstorage.asp –

+0

。あなたはそれを使うことができないと思いますか?クライアントレベルまたはサーバーレベルのいずれかで、ここでキャッシングするのが良い考えです。 –

答えて

1

をので、あなたはあなたがそれをサポートしていないブラウザをターゲットにしている場合を除き、のlocalStorageかのsessionStorage罰金にそれを格納することができる必要があります最初のオフ。言っ

、私はあなたがそれをDBに格納しているという事実が、それが十分にfrで変わることを意味するので、 でないことが最良だと思いますあなたがあまりにも長い間それをキャッシュするならば、バグのあるクライアントサイドの動作を得ることができます。

代わりに、私はちょうど、セットアップミドルウェアや地元の人々にそれを添付し、サーバー上のキャッシュのいくつかの種類をしたい場合を除き、要求ごとにオブジェクトをしたい:「「

app.use(function(req, res, next) { 
    mongodb.connect(url, function(err, db){ 
     if (err) return next(err); 
     var collection = db.collection('companies') 
     collection.find({}).toArray(function(err, companies){ 
      if (err) return next(err); 
      res.locals.companies = companies; 
      next(); 
     }); 
    }); 
}); 
+0

ああ、私は次のように使うことについても読んでいました。それは行く方法のように思えますし、データについての良い点は変更することができます。私はそれを考慮しませんでした。 –

+0

@ S.なぜあなたはこの回答にポイントを与えなかったのですか、あるいはあなたと他の誰かが下落しましたか?すべてのルート(すべてのページ)にデータをロードする最も適切な方法を探していました。このトピックは、キャッシュをローカルストレージにするというアイデアを参考にして役立ちます(例として、app.useステートメントのミドルウェアコールに対してnere Paulがいいでしょう。 – blamb

関連する問題