我意识到这听起来像是一个完全多余的问题,但只是听我说。
最终我想从dom查询MongoDB,但在此之前,我可以通过我的路由模块进行操作。这是我的疑问:
var db = require('./config/db.js');
router.get('/test', function (req, res) {
res.jsonp(db.getData('sampleSet'));
});
' sampleSet'是我查询的集合的名称。 getData函数应该从MongoDB获取数据。我把它放在MongoClient连接函数的回调中,因为我无法用其他方式表示。从我的角度来看,由于getData()
返回一个带回调的函数findData
,它应该返回数据。但它并没有。 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();
});
}
});
答案 0 :(得分: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
// ..
// ..
}, {
collection: "sampleSet" // collection name
});
// // Export the Mongoose model
var SampleSet = mongoose.model('SampleSet', sampleSetSchema);
module.exports = {
SampleSet: SampleSet
}
答案 1 :(得分:0)
您的findData
方法未返回任何内容。
将docs
传递给callback
,callback
再次将docs
返回findData
方法。但findData
没有回复。
因此,如果findData
没有返回任何内容,getData
将不会返回任何内容。