Node.js回调不执行

时间:2017-12-30 23:18:16

标签: javascript node.js mongodb callback mongodb-query

我已经设置了一个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中看到结果,结果显示出来。有谁知道回调没有被执行的原因?

1 个答案:

答案 0 :(得分:1)

非常感谢,这很有用!我现在向getResult module.exports.getResult = function (query, done){添加了一个done参数,然后在findDocuments函数findDocuments(db, function(docs) { done(docs); client.close(); });内调用done 我也意识到我实际上不需要processResult函数。