2017-07-29 8 views
0

主にmongoDBデータと配列をレンダリングしたいと思います。私がしたいのは、自分のejsファイルがデータベース内のコンポーネントを使用できるようにすることです。ここ は私のコードです:コードが非同期であるので、それは時間内のデータベース配列にすべてをプッシュしていないようejsファイルのmongodbデータを扱う最良の方法

//Array to store all restaurants 
var restArray = []; 

//Need database restaurant schema 
var databaseArray = []; 

//Find the restaurant in the database, 
//If not there create one. 
var findOrCreate = function() { 
    Restaurant.findOne({ 
      nameOfRest: this.nameOfRest 
     }) 
     .then(exist => { 
      if (!exist) { 

       this.save() 
        .then(result => { 
         databaseArray.push(result); 
        }) 
        .catch(err => { 
         console.log(err); 
        }) 
      } else { 
       databaseArray.push(exist); 
      } 
     }) 
     .catch(err => { 
      debugger; 
      console.log(err); 
     }) 
} 
//Go through each restaurant and put in function. 
restArray.forEach(function(restArr) { 

    var tempRest = new Restaurant({ 
     nameOfRest: restArr.restaurant.name, 
     favoriteFoods: [], 
    }); 
    //databaseArray.push(tempRest); 

    findOrCreate.call(tempRest); 
}); 
    //*****************I would use database array here 
res.render('restaurant', { 
    restHTML: restArray 
}); 

これは正しくありません。私の質問は、ejsファイルで使用するデータベースデータにアクセスするより良い方法ですか、またはスキーマデータをデータベース配列にプッシュしてrestArrayデータとともにレンダリングする方法を見つける必要があります。 (私はrestArrayが必要です)。

<script> 
window.onload = function() 
{ 
    var ctx = document.getElementById("myChart").getContext('2d'); 
    var myChart = new Chart(ctx, 
    { 
     type: 'bar', 
    data: { 
     labels: ["Chili dog", "Burger", "Zucchini Fries"], //*****************Put mongodb data inside here ******************* 
     datasets: [{ 
      label: 'Best food here:' , 
      data: [12, 19, 3], //********************Put mongodb data inside here. ****************** 
      backgroundColor: [ 
       'rgba(255, 99, 132, 0.2)', 
       'rgba(54, 162, 235, 0.2)', 
       'rgba(255, 206, 86, 0.2)', 
      ], 
      borderColor: [ 
       'rgba(255,99,132,1)', 
       'rgba(54, 162, 235, 1)', 
       'rgba(255, 206, 86, 1)', 
      ], 
      borderWidth: 1 
     }] 
    }, 
    options: { 
     responsive: false, 
     scales: { 
      yAxes: [{ 
       ticks: { 
        beginAtZero:true 
       } 
      }] 
     } 

    } 
    }); 
} 
</script> 
+0

のように見える共同発電+とここhttp://mongoua.tk/presentations/ecmascript-6-and-the-node-driver

それについての詳細を読んで、私はそれがどこでも使用されて表示されません。正確には何が使われていますか? – Paul

+0

restArrayとdatabaseArrayの両方を組み合わせて、res.renderで使用することができます。私はnode.jsを初めて使っているので、これらの問題にどう対処するかについてはあまりよく分かりません@Paul –

+0

いいえ、何のために必要なのですか。 – Paul

答えて

1

スタートをするECMAScript 6つの発電機を使用して:私はここにファイル私のEJSにあるこのchart.js内部で使用されるMongoDBのデータが欲しいです。つまり、コードは同期的に見え、Generators + coはあなたのために非同期の魔法を実行します。あなたのコードはあなたがdatabaseArrayを必要とすると言うこの

var co = require('co'); 

var databaseArray = []; 
co(function*() { 
    var record = yeild Restaurant.findOne({nameOfRest:this.nameOfRest}); 
    if(!record){ 
    record = yeild Restaurant.save(this); 
    } 
    databaseArray.push(record); 
    // do other operations.... 
    res.render('restaurant',{restHTML:restArray}); 
}).catch(function(err) { 
    console.log(err.stack); 
    res.status(500).send(err); 
}); 
+0

彼は「あなたのコードを同期させる」ルート(私はそれには同意しませんが、いずれにしても)を使うことをお勧めしたいならば、他のサードパーティの依存関係を追加するのではなく、非同期/待機のアプローチを使用しますか? – Paul

関連する問題