我试图创建一个函数来查询mongo db然后返回结果,然后在页面上呈现它。
我目前正在尝试使用console.log查找对象以找出原因无效:
var getMarkets = function (marketID) {
MongoClient.connect('mongodb://localhost:27017/test', function(err, db){
db.collection("new-test-2", function (err, collection) {
collection.find({"ID": parseInt(marketID, 10)}).toArray(function(err, items) {
console.log(items);
return items;
});
});
});
};
router.get('/markets/:marketid', function(req, res, next) {
var marketobj = getMarkets(req.params.marketid);
console.log(marketobj);
res.render('api', { title: 'API', marketid: marketobj });
});
嵌套在函数内的日志工作正常,但是路由对象内的日志返回undefined。这里发生了什么?我觉得它与异步回调有关,但我无法推理它。
非常感谢。
答案 0 :(得分:0)
Mongodb连接和查找操作是异步函数。所以你需要使用回调来返回结果。只是返回里面的功能不起作用。
var getMarkets = function (marketID, callback) {
MongoClient.connect('mongodb://localhost:27017/test', function(err, db){
db.collection("new-test-2", function (err, collection) {
collection.find({"ID": parseInt(marketID, 10)}).toArray(function(err, items) {
if(err)
callback(err)
else {
console.log(items);
callback(null,items);
}
});
});
});
};
router.get('/markets/:marketid', function(req, res, next) {
getMarkets(req.params.marketid, function (err, marketobj) {
console.log(marketobj);
res.render('api', { title: 'API', marketid: marketobj });
});
});
你也可以使用承诺。
答案 1 :(得分:0)
使用回调功能访问数据
var getMarkets = function (marketID , callback) {
MongoClient.connect('mongodb://localhost:27017/test', function(err, db){
db.collection("new-test-2", function (err, collection) {
collection.find({"ID": parseInt(marketID, 10)}).toArray(function(err, items) {
console.log(items);
//return callback
return callback(items);
});
});
});
};
router.get('/markets/:marketid', function(req, res, next) {
getMarkets(req.params.marketid , function(marketobj){
if(marketobj){
console.log(marketobj);
res.render('api', { title: 'API', marketid: marketobj });
}else{
// do whatever you want
res.render('api', { title: 'API', marketid: {} });
}
});
});