2016-08-30 104 views
0

你好,我正在學習mongoDB,並試圖將我的數據庫查詢結果打印到瀏覽器。MongoDB輸出到瀏覽器

我有一個程序工作的地方寫入輸出JSON使用console.log()

控制檯是否有使用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

JavaScript是工作在異步模式。你可能需要使用回調函數或傳遞res函數(響應)對象在''invokeDatabase(res)''這樣的副函數中,而你可以直接用'res.json({titel:「Hello」})''來表示json響應。 –

+0

如果你得到的是一個對象,你需要提供一個JSON對象給調用者...將其轉換爲JSON。 'JSON.stringify(invokeDatabase())'是一個通用的方法來做到這一點; 'res.json()'在這種情況下更合適。 – mah

+0

http://justbuildsomething.com/node-js-best-practices/#1對於像我這樣的初學者來說值得一讀。 – sova

回答

1

這個例子可以幫助你瞭解

// 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,比如回調,事件循環等。你應該調試代碼或者在控制檯上打印或者斷言。 –