2016-08-30 102 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,比如回调,事件循环等。你应该调试代码或者在控制台上打印或者断言。 –