2016-03-05 3 views
4

В настоящее время я создаю систему входа для моего приложения NodeJS. Тем не менее, я получаю странную ошибку от MongoDB всякий раз, когда я пытаюсь получить сбор.Node.js MongoDB Sockets closed error

Сообщение об ошибке

[MongoError: server localhost:27017 sockets closed] 
name: 'MongoError', 
message: 'server localhost:27017 sockets closed' 

Heres мой код для подключения к БД

var username = req.body.user.username; 
    var password = req.body.user.password; 

    MongoClient.connect("mongodb://localhost:27017/myDb", function(err, db){ 
     assert.equal(null, err); 

     var collection = db.collection("accounts"); 
     collection.findOne({"username": username}, function(err, item){ 
      console.log(item); 
      console.log(err); 
     }); 

     db.close(); 
    }); 

ли кто-нибудь может увидеть, где Ive пошло не так? Спасибо в продвинутом :)

ответ

7

Вы закрываете базу данных до того, как запрос на поиск будет выполнен (это метод async). Удалите это db.close() или переместите его на обратный вызов findOne.

var username = req.body.user.username; 
var password = req.body.user.password; 

MongoClient.connect("mongodb://localhost:27017/myDb", function(err, db){ 
    assert.equal(null, err); 

    var collection = db.collection("accounts"); 
    collection.findOne({"username": username}, function(err, item){ 
     console.log(item); 
     console.log(err); 
     db.close(); 
    }); 


}); 

Кстати, вы будете иметь очень низкую производительность за счет подключения/закрытия Connexion DB с каждым запросом, и вы должны избегать делать это: подключить один раз при старте приложения и закрыть дб на приложение близко

+0

: 0 Большое спасибо! «Отправляет кнопку« Принять ») :) –