Я пытаюсь получить количество записей из базы данных с помощью 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"
Поскольку вы создаете 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
переменные.
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);
}