2016-04-06 38 views
0

私は、サーバー側のテンプレートエンジンとしてデータベースとハンドルバーとしてmongoDBを使用しています。アプリケーションでAngularJSまたはAjaxを使用していません。res.renderを使用して同時にjsonファイルを送信する

ルートの1つでは、ページをレンダリングし、データベースからjsonファイルを送信する必要があります。しかし、私はこれを達成することができません。

これは、ルートによってから私のコードスニペットです:、HBSで

router.get('/disks', function(req, res, next) { 

     var risime; 

    places.find({"category": "disks"}, function(err, disk){ 
     if(err){ 
     throw err; 
     } 

     risime= disk; 
     console.log(risime); //PROPERLY LOGS THE OUTPUT 

    }); 

    res.render('diskPage', 
    { 
     'disks': risime 
    }); 

}); 

私はそれを捕獲しようとしていますが、私はJSONデータを取得していない午前:私はどのように

var clrisime= "{{risime}}" 
    console.log(clrisime); // DOES NOT LOG ANYTHIN 

実現させる?

+6

コールバック内に 'res.render()'を入れます... – Scimonster

答えて

5

あなたは2つの単純なミス行わ:あなた応じて、データベースの結果を使用するようにたいので

router.get('/disks', function(req, res, next) { 

    var risime; 

    places.find({"category": "disks"}, function(err, disk){ 
     if(err){ 
     throw err; 
     } 

     risime= disk; 
     console.log(risime); //PROPERLY LOGS THE OUTPUT 

     // this belongs inside your db callback 
     res.render('diskPage', 
     { 
      'disks': risime 
      // if you call your field 'disks' here, you need to write {{disks}} in your template 
     }); 
    }); 


}); 
  1. を、あなたはコールバック内res.renderを配置する必要があります。
  2. テンプレート内の変数名とレンダーオブジェクトのフィールド名が同じである必要があります。
1

コードは非同期で実行されます。 places.findとres.renderはほぼ同じ時間(〜10ms max)で実行され、レンダリングはplace.findの前に実行されることを意味します。したがって、レンダリングには論理的にデータがありません。

あなたは同様にあなたの最初のcondiiton(places.find)の解像度のコールバック内のコードの2番目の部分を配置する必要があります。

router.get('/disks', function(req, res, next) { 
    var risime; 
    places.find({"category": "disks"}, function(err, disk){ 
    if(err){ 
    throw err; 
    } 
    risime= disk; 
    console.log(risime); //PROPERLY LOGS THE OUTPUT 
    res.render('diskPage', 
    { 
    'disks': risime 
    }); 
}); 

そして、あなたは{{ディスクを}}使用している場合、それが動作しますあなたの意見では{{risime}}の代わりに。

関連する問題