gpt4 book ai didi

javascript - 如何通过回调访问 nodejs 中的 mongodb 计数结果?

转载 作者:可可西里 更新时间:2023-11-01 10:32:23 25 4
gpt4 key购买 nike

如何在 nodejs 中访问 mongodb 计数结果,以便异步请求可以访问结果?我可以获得结果并更新数据库,但异步请求无法访问变量,或者变量为空,并且在发出下一个异步请求时变量似乎已更新。请求不得等待查询完成,并且下一个请求将填充上一个请求的变量。

testOne.increment = function(request) {   
var MongoClient = require('mongodb').MongoClient,
format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/bbb_tracking', function(err, db) {
if (err) throw err;
collection = db.collection('bbb_tio');
collection.count({vio_domain:dom}, function(err, docs) {
if (err) throw err;
if (docs > 0) {
var vio_val = 3;
} else {
var vio_val = 0;
}
if (vio_val === 3) {
event = "New_Event";
var inf = 3;
}
db.close();

console.log("docs " + docs);
});
});
};

在上面,即使在范围内设置了变量,它们也不是异步定义的。我能否获得一些有关正确构建此结构的指导,以便在回调中填充变量。谢谢!

最佳答案

由于 count 函数是异步的,您需要将回调传递给 increment 函数,以便在返回 count 时从数据库中,代码可以调用回调。

testOne.increment = function(request, callback) {   
var MongoClient = require('mongodb').MongoClient,
format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/bbb_tracking', function(err, db) {
if (err) throw err;
var collection = db.collection('bbb_tio');
// not sure where the dom value comes from ?
collection.count({vio_domain:dom}, function(err, count) {
var vio_val = 0;
if (err) throw err;
if (count > 0) {
vio_val = 3;
event = "New_Event";
var inf = 3;
}
db.close();

console.log("docs count: " + count);
// call the callback here (err as the first parameter, and the value as the second)
callback(null, count);
});
});
};

testOne.increment({}, function(err, count) {
// the count would be here...
});

(我不明白您使用的变量是什么意思,也不知道为什么以后不使用它们,所以我只是做了一些清理工作。变量的范围限定为功能 block 并提升到函数,因此您无需像使用 vio_val 那样在每个 if block 中重新声明它们。

关于javascript - 如何通过回调访问 nodejs 中的 mongodb 计数结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20317102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com