Javascript Node.js回调不´;不执行
我已经设置了一个API,它在MongoDB中查找请求并将结果作为JSON对象返回。我之前在main.js中设置了它,但现在我想对它进行模块化,并将mongo的内容转换为queryMongo.js,在main.js的POST请求中调用它(我使用POST而不是get以避免get限制) 下面是使用express的main.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
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中的回调不是自动的。您必须将它们定义为参数,将它们作为参数传递(这是您正在做的唯一部分),并在适当的时间在函数中自己执行它们。