2017-12-30 43 views
0

MongoDBでリクエストを検索し、その結果をJSONオブジェクトとして返すAPIをセットアップしました。私はmain.jsの初期段階でそれをすべて設定しましたが、今はモジュール化してmain.jsのPOSTリクエストで呼び出されるqueryMongo.jsにmongoのものを移しました(私はPOSTの代わりにPOSTを使用します)。だからここ )制限をGET避けるExpressを使用してmain.jsです:Node.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(data)またはconsole.log( 'query done')さえ実行されません。関数getResult(query)の最初の部分は正常に動作しています。つまり、関数getが呼び出され、結果が表示されたconsole.logから見ることができるようにクエリが実行されます。誰にコールバックが実行されていないのか考えていますか?

+2

あなたの関数getResultはパラメータとしてコールバックを取っていませんあなたは1つの引数だけを定義します – douxsey

+0

'getResult()'関数のコールバック引数を定義せず、すべてが内部で完了したときにコールバックを呼び出さない'getResult()' node.jsのコールバックは自動ではありません。あなたはそれらを引数として定義し、それらを引数として渡し(これの唯一の部分)、適切な時にあなた自身の関数内でそれらを実行しなければなりません。 – jfriend00

答えて

0

ありがとうございました!私は今、getResultに完了引数を追加しましたmodule.exports.getResult = function (query, done){そしてfindDocuments関数の中でdoneを呼び出しましたfindDocuments(db, function(docs) { done(docs); client.close(); }); 私は実際にはprocessResult関数が必要ないことに気付きました。

関連する問題