2015-01-29 7 views
1

Я работаю над http-узлом node.js. Сервер подключен к mongodb. Я запрашиваю почтовый запрос на сервер для получения документов от mongodb. Но ответ сообщения не ждет завершения обратного вызова mongodb. И поэтому я не получаю требуемый вывод на стороне клиента. Как справиться с этим?node.js - ответ отклика не ждет завершения обратного вызова

http.createServer(function(request, response) { 
    if(request.method == "POST") { 
     var body = ''; 
     request.on('data', function(chunk) { 
      console.log(chunk.toString()); 
      body += chunk; 
     }); 
     request.on('end', function() { 
      MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) { 
       if(err) { 
        console.log("We are not connected"); 
       } 
       else { 
        var sysInfo = db.collection('sysInfo'); 
        var jsonObj = sysInfo.find().toArray(); 
        response.writeHead(200, {'Content-Type': 'text/plain'}); 
        response.end(jsonObj); 
       } 
      }); 
     }) 
    } 
}); 
+0

Вы получаете ошибку? Я спрашиваю, потому что обратный вызов метода mongoose 'connect' просто получает аргумент' error'. Итак, когда вы делаете 'db.collection ('sysInfo')', вы должны получить ошибку (db является 'undefined'). –

+0

Нет. У меня нет ошибок. Но до того, как код достигнет response.end (jsonObj), пост-ответ будет получен у клиента, который имеет текущую html-страницу в качестве своего содержимого. –

+0

Получил это. Ответ, предоставленный @JohnnyHK, идеален. Я просто смутился тегом 'mongoose' в вашем вопросе, поэтому я подумал, что вы пытаетесь напрямую подключиться через' mongoose'. Но потом я понял, что вы используете собственный драйвер mongodb. –

ответ

2

toArray является асинхронной, поэтому он дает свои результаты с помощью обратного вызова, а не возвращать их.

Так что часть должна быть:

sysInfo.find().toArray(function(err, docs) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end(docs); 
}); 
+0

Это не помогает. Причина: 'request.on ('end'' ... не ждет завершения обратного вызова 'MongoClient.connect'. Таким образом, проблема заключается в обратном вызове' MongoClient.connect'. –

+0

Или 'response.end (docs) 'запускается после того, как' request.on ('end' ... 'возвращает данные (текущая html-страница) клиенту. –

+0

Действительно извините. Проблема решена. Источник проблемы был другой. Я предоставил неполную Спасибо за вашу помощь. –

Смежные вопросы