Express js使用来自mongodb的值到查询外部

我是新的快速js和节点js。 我想知道是否可以做到这一点。

第一件事我试图得到1查询计数。

第二我查询收集login。 循环并格式化并使用ID获取名称值。

在count1上我得到了undefined,我发现它在json响应中被忽略。

如何将查询返回到查询之外?

router.post('/logmein', function(req, res, next) { var email = req.param('email'); var password = req.param('password'); var count1; MongoClient.connect(MongoUrl, function(err, db) { if (err) return; db.collection('users').count({email: email,password: md5(password)}, function(err, count) { count1 = count; }); db.collection('login').find({email: email,password: md5(password)}).toArray(function(err, results){ console.log(results); // output all records }); //use results /* foreach each results format with other info var new_array; */ res.json({"success": true,"count":count1,new_array: new_array}); }); }); 

asynchronous问题,你必须更多地看待它。 使用asynchronous模块 ,然后您将能够并行地触发查询。 最后,你将在最后的callback中得到结果。 这个片段将解决您的问题:

 var async = require('async'); router.post('/logmein', function (req, res, next) { var email = req.param('email'); var password = req.param('password'); var retResults; var count1; MongoClient.connect(MongoUrl, function (err, db) { if (err) return; async.parallel([ function(callback){ db.collection('users').count({ email: email, password: md5(password) }, function (err, count) { return callback(err, count); }); }, function(callback){ db.collection('login').find({ email: email, password: md5(password) }).toArray(function (err, results) { return callback(err, results); }); } ], function(err, results) { if (err) { // @todo: handle the error } count1 = results[0]; retResults = results[1]; //use results /* foreach each results format with other info var new_array; */ res.json({ "success": true, "count": count1, new_array: new_array }); }; }); }); 

你需要像async.parallel这样的东西来控制nodejs应用程序的asynchronousstream

 async.parallel([ function(callback){ ... }, function(callback){ ... } ], function(err, results) { // optional callback };