Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js回调不´;不执行_Javascript_Node.js_Mongodb_Callback_Mongodb Query - Fatal编程技术网

Javascript Node.js回调不´;不执行

Javascript Node.js回调不´;不执行,javascript,node.js,mongodb,callback,mongodb-query,Javascript,Node.js,Mongodb,Callback,Mongodb Query,我已经设置了一个API,它在MongoDB中查找请求并将结果作为JSON对象返回。我之前在main.js中设置了它,但现在我想对它进行模块化,并将mongo的内容转换为queryMongo.js,在main.js的POST请求中调用它(我使用POST而不是get以避免get限制) 下面是使用express的main.js: dataRouter.route('/data') .post(function(req, res){ var query =req.query; getR

我已经设置了一个API,它在MongoDB中查找请求并将结果作为JSON对象返回。我之前在main.js中设置了它,但现在我想对它进行模块化,并将mongo的内容转换为queryMongo.js,在main.js的POST请求中调用它(我使用POST而不是get以避免get限制) 下面是使用express的main.js:

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(“查询完成”)都无法执行。函数getResult(query)的第一部分工作正常,即调用函数get,并按照我在console.log中看到的结果执行查询。有人知道为什么不执行回调吗?

非常感谢,这很有效!我现在在getResult
module.exports.getResult=function(query,done){
中添加了一个done参数,然后在findDocuments函数
findDocuments(db,function(docs){done(docs);client.close();});

我还意识到我实际上不需要processResult函数。

你的函数getResult不将回调作为参数你只定义了一个参数queryYou不为你的
getResult()
函数定义回调参数,当一切都在
getResult()内完成时,你也不调用回调
.node.js中的回调不是自动的。您必须将它们定义为参数,将它们作为参数传递(这是您正在做的唯一部分),并在适当的时间在函数中自己执行它们。