我已经设置了一个API,它在MongoDB中查找请求并将结果作为JSON对象返回。我早先在main.js中设置了它,但现在我想模块化它并将mongo东西转移到queryMongo.js,它在main.js的POST请求中调用(我使用POST而不是get避免GET限制) 所以这里是main.js使用express:
dataRouter.route('/data')
.post(function(req, res){
var query =req.query;
getResult(query, function(err, data){
console.log('query done');
console.log(data);
res.json(data);
});
getResult函数在queryMongo.js
中定义module.exports.getResult = function (query){
const url = 'mongodb://localhost:27017';
const dbName = 'MyDB';
function processResult(docs){
var result = docs;
module.exports.result=result;
}
MongoClient.connect(url, function(err, client) {
assert.equal(null, err);
console.log("Connected successfully to server");
const db = client.db(dbName);
findDocuments(db, function(docs) {
processResult(docs);
client.close();
});
});
const findDocuments = function(db, callback) {
const collection = db.collection('myCollection');
collection.find(query).toArray(function(err, docs) {
assert.equal(err, null);
callback(docs);
});
};
};
一切都独立工作正常,但getResult函数无法执行回调,即res.json(数据)甚至console.log('query done')都没有执行。函数getResult(query)的第一部分工作正常,即函数get被调用,并且我可以从console.log中看到结果,结果显示出来。有谁知道回调没有被执行的原因?
答案 0 :(得分:1)
非常感谢,这很有用!我现在向getResult module.exports.getResult = function (query, done){
添加了一个done参数,然后在findDocuments函数findDocuments(db, function(docs) { done(docs); client.close(); });
内调用done
我也意识到我实际上不需要processResult函数。