2017-07-20 12 views
0

pong/htmlページのmongodbからデータを取得しようとしています。私は関連するノードとmongoサーバーを稼働させています。mongodbを照会し、結果をindex.pugに表示しようとすると、[object Object]が返されます。

私が持っているサンプルデータは

[ { _id: 59708077c9412f6d7f7e8485, 
username: 'xyz123', 
email: '[email protected]' } ] 

そして、私はこれをログコンソール、それはノードのターミナルウィンドウに表示されています。

私app.jsのコードは

var MongoClient = require('mongodb').MongoClient; 
var url = 'mongodb://localhost:27017/questiondb'; 

var mongotest = []; 

MongoClient.connect(url, function (err, db) { 
     var str = db.collection('usercollection').find(); 
     str.each(function (err, doc) { 
       mongotest.push(doc); //Push result onto results_array 
           console.log(mongotest) 

     }); 

       app.get('/', (req, res) => { 
        res.render('index', {"results": mongotest }); 


       }); 

      }); 

で、私のindex.pugファイルに私はhtmlページに結果が

Result [object Object] 
ある

p Hello 
    each mongotest, i in results 
     div Result #{i} #{mongotest} 

を持っています

私は、結果をオブジェクトから文字列に変更する必要があると仮定しています。 JSON.stringifyのようなものを使うと、pugのループを使って、別々の繰り返しとしてクエリーの文字を描画します。

私は近いですが、事前に

おかげで思っていたものについては

固定

:-)私の学習に穴が明らかに存在し、これらは私がに私のコードに加えられた変更されていますそれを働かせてください。変数にプロパティを保存し、それをpugテンプレートで参照しました。

var readVar; 
       readVar = mongotest[0].username; 

    }); 
}; 

      app.get('/', (req, res) => { 
       res.render('index', { readVar}); 

答えて

0

.find()メソッドは非同期メソッドです。 あなたはこのようにそれを使用する必要があります。

db.collection('usercollection').find({}, callback); 

function callback(err, docs){ 
    if(err) { /*errorHandler*/ }; 
    docs.each(function (err, doc) { 
     if(err) { /*errorHandler*/ } 
     mongotest.push(doc); //Push result onto results_array 
     console.log(mongotest) 
    }); 
}; 

いけないのコールバックの内側にそのための

+0

おかげでエラーを処理することを忘れて、よくnoted.I'veは、その変更をしたが、まだ何も通じ来ません。私はオブジェクトから変数にセットのユーザー名を参照し、その変数をpugテンプレートに渡しましたが、何も得られません。それはnodejsコンソールに正しく記録されます... – lycrake

+0

実際には、それを考え出しました。私はあなたの助けを借りて、他の人のための答えで私の質問を更新します! – lycrake

関連する問題