2015-11-06 108 views
0

我意识到这听起来像一个完全多余的问题,但只是听到我出去。如何用Node.js查询Mongo?

最终我想从dom中查询MongoDB,但在此之前,我可以从我的路由模块中进行操作。这里是我的查询:

var db = require('./config/db.js'); 

router.get('/test', function (req, res) { 
    res.jsonp(db.getData('sampleSet')); 
}); 

'sampleSet'是我查询的集合的名称。 getData函数应该从MongoDB获取数据。我把它放在MongoClient的连接函数的回调中,因为我无法用其他方式来计算。从我的角度来看,由于getData()正在返回一个回调函数,它应该返回数据。但事实并非如此。 console.logs返回数据,但它必须返回undefined。

function findData (db, c, callback) { 
    var collection = db.collection(c); 
    collection.find().toArray(function(err, docs) { 
    assert.equal(err, null); 
    callback(docs); 
    }); 
}; 

MongoClient.connect(url, function(err, db) { 
    assert.equal(err, null); 
    console.log('CONNECTED CORRECTLY TO SERVER.'); 
    exports.getData = function(c) { 
    return 
    findData(db, c, function(docs) { 
     console.log('FOUND THE FOLLOWING RECORDS: '); 
     return docs; 
     db.close(); 
    }); 
    } 
}); 
+1

'res.jsonp'将最终使用'getData'调用的返回值(这不算什么) –

回答

0

您的findData方法没有返回任何东西。

它传递docscallbackcallback再次返回到docs方法findData。但从findData没有返回。

因此,如果findData没有返回任何东西,getData不会返回任何东西。

4

如果var db = require('./config/db.js');是你的架构和'sampleSet'是集名称,然后你就可以使用这个

router.get('/test', function (req, res) { 
 
    db.sampleSet.find({},function(err,data){ 
 
    if(err) 
 
     throw err; 
 
    else 
 
     res.send(data) 
 
    }); 
 
    });

获取数据,但对于这一点,你必须写db.js文件以这种方式

var mongoose = require('mongoose'); 
 
var Schema = mongoose.Schema; 
 

 

 

 
var sampleSetSchema = new Schema({ 
 
//Your schemas goes here.. 
 
    // fields : types 
 
    // .. 
 
    // .. 
 
}, { 
 
\t collection: "sampleSet" // collection name 
 
}); 
 

 

 

 
// // Export the Mongoose model 
 

 
var SampleSet = mongoose.model('SampleSet', sampleSetSchema); 
 
module.exports = { 
 

 
\t SampleSet: SampleSet 
 

 
}