我正在尝试使用nodejs从数据库中获取记录数,但问题是由于同步请求,我无法打印它们。当我尝试在函数内部打印时,它打印得很好,但在函数之外,它没有。我知道这是由于JS的同步行为,但我想这样做(可能是异步)。我是Javascript和nodejs的新手,所以请指导我如何做到这一点。这是代码。
router.post('/numofrecs', function(req, res) {
var db = new Db('nmydb', new Server('localhost', '27017'));
db.open(function (err, db) {
db.authenticate('', '', function (err, result) {
var url = 'mongodb://localhost:27017/nmydb';
client.connect(url, function (err, db) {
que = new Array();
var questioncol = db.collection('allquestions');
questioncol.find({}).count(function (err, data) {
rec = data;
console.log("Num of rec:"+rec);
//inside the connect function , it prints fine here
});
console.log('Num of rec:'+ rec);
//but it doesnot print here outside the connect function and just print "undefined"
答案 0 :(得分:1)
由于您正在构建HTTP服务器,因此您不希望在服务器上执行任何同步操作,因为此类操作会导致服务器在同步操作期间对所有客户端无响应。相反,您应该在db查询的回调中完成所需的工作。
router.post('/numofrecs', function(req, res) {
var db = new Db('nmydb', new Server('localhost', '27017'));
db.open(function (err, db) {
db.authenticate('', '', function (err, result) {
var url = 'mongodb://localhost:27017/nmydb';
client.connect(url, function (err, db) {
var que = new Array();
var questioncol = db.collection('allquestions');
questioncol.find({}).count(function (err, data) {
console.log("Num of rec:"+data);
// do stuff with data here.
doStuff(data);
});
});
});
});
});
不要忘记var
您的变量。
答案 1 :(得分:0)
npm install -g xd-synchttp
const sync = require('xd-synchttp');
let content = "";
let post_data={'a':1,'b':2};
try{
content = sync.http_get('http://www.csdn.net',3);
console.log(sync.http_post('http://www.baidu.com',post_data,0));
}
catch(err){
console.log(err);
}