2016-08-30 6 views
0

こんにちは私はmongoDBを学び、データベースクエリ結果をブラウザに出力しようとしています。MongoDBのブラウザへの出力

私はそれがconsole.log()

を使用してコンソールに出力JSONを書き込むプログラム作業は、単に出力にres.send()(速達使用)またはresponse.write()response.send()を使用する方法はあります生のJSONデータを持つデータベースクエリこと取得?

つまり、データベースの呼び出しをに戻すにはどうすればよいですか?

// Use connect method to connect to the server 
var invokeDatabase = function() { 
    MongoClient.connect(url, function(err, db) { 
     assert.equal(null, err); 
     console.log("Connected successfully to database server"); 

     findDocuments(db, function() { 
      findDocumentsFiltered(db, function() { 
       db.close(); 
      }); 
     }); 
    }); 
}; 

//routes 
app.get('/', function(req, res) { 
    console.log("Someone connected.") 
    res.send("accessing database... " + invokeDatabase()) 
     //res.send('Welcome G') 
}) 
+1

あなたが理解するのを助けることができます。 'res.json({titel:" Hello "})'によってexpressから直接jsonに応答することができる間に、 'invokeDatabase(res)'のようなサイド関数でcallback関数かres(response)オブジェクトのどちらかを使う必要があります。 –

+0

戻ってきたものがオブジェクトで、呼び出し元にJSONオブジェクトを提供する必要がある場合JSONに変換します。 'JSON.stringify(invokeDatabase())'はこれを行う一般的な方法です。この場合、 'res.json()'がより適切です。 – mah

+0

http://justbuildsomething.com/node-js-best-practices/#1私のような初心者のために読める価値のあるものです。 – sova

答えて

1

この例では、JavaScriptが非同期的に取り組んでいる

// Use connect method to connect to the server 
var invokeDatabase = function(callback) { 
    MongoClient.connect(url, function(err, db) { 
     //assert.equal(null, err); 
     if(err) { 
      console.log("Unable to connect database"); 
      callback(err, null); 
      return; 
     } 
     console.log("Connected successfully to database server"); 

     findDocuments(db, function() { 
      findDocumentsFiltered(db, function(err, data) { 
       callback(err, data); 
       db.close(); 
      }); 
     }); 
    }); 
}; 

//Added for demo. Here users is collection 
var findDocumentsFiltered = function(db, callback) { 
    db.collection('users').find({}).toArray(function(err, userList) { 
     callback(err, userList); 
    }); 
}; 

//routes 
app.get('/', function(req, res) { 
    console.log("Someone connected.") 
    invokeDatabase(function(err, data) { 
     if(err) 
      res.status(500).json({error: err}); 
     else 
      res.json(data); 
    })) 
     //res.send('Welcome G') 
}) 
+0

ありがとう!どんな理由であれ、無名関数内のコードは到達不能と思われる。私のinvokeDatabase()メソッドはコールバックが必要ですか? – sova

+0

上記の例を更新しました(データベースに正常に接続されているかどうかを確認します)。最初にコールバック、イベントループなどのJavaScriptを理解しようとすることをお勧めします。コードをデバッグしてコンソールに出力するか、アサートしてください。 –