2017-12-30 78 views
0

MongoDB에서 요청을 검색하여 결과를 JSON 객체로 반환하는 API를 설정했습니다. 이전에 main.js에서 모든 것을 설정 했었지만 모듈화하고 main.js의 POST 요청에서 호출되는 queryMongo.js로 mongo 항목을 옮겼습니다 (대신 POST를 사용합니다. 그래서 여기 Express를 사용하여 main.js입니다) 제한을 GET 피 :Node.js 콜백이 실행되지 않음

는 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); 
    }); 
    }; 
}; 

모두에 정의되어

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를 기능 res.json (data) 또는 심지어 console.log ('query done') 콜백을 실행하지 않습니다. getResult (query) 함수의 첫 번째 부분은 정상적으로 작동합니다. 즉, get's 함수가 호출되고 결과가 표시되는 console.log에서 볼 수있는 것처럼 쿼리가 수행됩니다. 콜백이 실행되지 않은 이유를 누구나 알고 있습니까?

+2

함수 getResult가 매개 변수로 콜백을 사용하지 않습니다. 하나의 인수 만 정의합니다. – douxsey

+0

getResult() 함수에 콜백 인수를 정의하지 않고 모든 것이 내부에서 완료되면 콜백을 호출하지 않습니다. 'getResult()'. node.js의 콜백은 자동이 아닙니다. 함수를 인자로 정의하고 인자로 넘겨야하며 (함수의 유일한 부분) 적절한 시간에 함수 내에서 직접 실행해야합니다. – jfriend00

답변

0

감사합니다. 이제 getResult에 인수를 추가하여 module.exports.getResult = function (query, done){을 호출 한 다음 findDocuments 함수 내에서 완료를 호출합니다. findDocuments(db, function(docs) { done(docs); client.close(); }); 사실 processResult 함수가 필요하지 않습니다.